Articles of Pdo

Oracle PDO OCI字符集失败

我正在使用即时oracle客户端11.2,PHP 5.5.16从源编译以下configuration参数: './configure' '–enable-fpm' '–enable-bcmath' '–with-bz2' '–enable-calendar' '–with-curl' '–enable-dba' '–enable-exif' '–enable-ftp' '–with-gd' '–with-gettext' '–with-kerberos' '–enable-mbstring' '–with-mcrypt' '–with-openssl' '–enable-shmop' '–enable-soap' '–enable-sockets' '–enable-sysvmsg' '–enable-wddx' '–enable-zip' '–with-zlib' '–with-xsl' '–with-mysql' '–with-mysqli' '–with-pgsql' '–with-pdo-mysql' '–with-pdo-pgsql' '–with-oci8' '–with-pdo-oci' 在我之前的configuration中,我用oracle和oci8使用了apache2(– –with-apxs2=/usr/bin/apxs2而不是–enable-fpm )。 我的数据源名称是: "oci:dbname=//IP:1521/SID;charset=UTF8" 。 它工作得很好。 今天我想把这个服务器configuration从apache移到nginx和fpm。 一切工作正常,除了连接,PDO抛出: OCIEnvNlsCreate: Check the character set is valid and that PHP has access to Oracle […]

PHP + MySQL的“数据库连接”降低了服务器的速度

我有一个ajax加载的脚本,每个访问者运行2个mysql语句(〜100每秒)。 这是一个简单的SELECT和UPDATE语句。 对于我的后端,我正在使用AWS RDS。 我注意到我的网站今天下降,我看到日志充满了以下… PHP-FPM-5.5错误日志: [11-Jun-2014 17:18:47] WARNING: [pool www] child 12203, script '/var/www/track.php' (request: "GET /track.php") executing too slow (5.282239 sec), logging 慢日志 script_filename = /var/www/track.php. [0x00007fcf11fda8f8] execute() /var/www/html/track.php:53 在RDS中,我的图表如下所示: 你可以看到数据库连接变得非常高。 在这一点上,我有点困惑,为了防止这种情况该怎么办。 我只能假设一些“备份”,也许数据库服务器只花了很长时间来响应? 然后,PHP基本上超负荷,因为请求进入太快(太“等待”),反过来开始取消我的服务器。 我使用的MySQL语句是使用PHP-PDO 。 我试图添加PDO::ATTR_TIMEOUT => 1到我的new PDO对象,但我不知道这是否甚至可以解决它(或者即使它工作或没有…)。 我的目标是不要让我的服务器因为数据库服务器缓慢或无响应而closures。 我需要PHP'足够聪明',不要等待很长时间,否则会因为MySQL响应速度不够快而被重载。 所有这些都是纯粹的猜想,也许根本就不是RDS,而且PHP不知道如何备份? 我不确定 谢谢!

Symfony3数据库调用需要很长时间,并停止整个网站的工作。 如何在一段时间后closures连接?

我的服务器设置是php7.0-fpm和nginx,symfony运行在上面。 我只是使用原始的pdo连接 $conn = $this->get('database_connection'); $results = $conn->fetchAll("SELECT * FROM myTable"); 我的一个SQL查询花费了很长时间,同时也在这段时间内closures了网站。 我想有一些configuration正在进行,我需要改变,但我是一个系统pipe理员/操作初学者。 我试图添加到我的php.ini中 default_socket_timeout = 3 我试着join=> options: timeout: 3 在我的symfony config.yml中。 都没有工作! 还有另一种设置超时的方法吗? 还是有其他的事情出错了?

PHP的持久性连接不重用(打开多个连接每个FPM工作人员)

我在testing从php到mysql的持续连接时遇到了一个非常奇怪的行为。 我有一个如下所示的小脚本: <?php $db = new mysqli('p:db-host','user','pass','schema'); $res = $db->query('select * from users limit 1'); print_r($res->fetch_assoc()); 我的设置是: 操作系统:CentOS 7.3 PHP / 7.1.18 PHP-FPM nginx的/ 1.10.2 MySQL的,30年6月5日 我试图用ab做一些请求: $ ab -c 100 -n 500 http://mysite/my_test_script.php PHP-FPM被configuration为有150名员工准备好了,我看到了我期待的150个与mysqlbuild立了连接,并在ab完成后保持打开状态。 我再次启动了ab,行为仍然是相同的,150个连接,没有新的连接打开。 一切都好。 然后我创build了一个脚本,做了相同的确切请求,相同的IP,相同的HTTP头,但用curl来作出请求,BOOM我有300个连接在mysql而不是150.我再次启动脚本,我还有300连接。 相同脚本的后续运行不会增加连接数量。 有没有人遇到过这样的事情? 有谁知道什么可以使PHP打开更多的连接比需要? 我错过了什么明显的? 如果不清楚我在问什么,请在下面评论,我会尽量改善我的解释问题。 PS我也试过这与PDO,同样的行为。 编辑:我的testing哪里不准确 进一步testing后,我注意到我的第一个testing不准确。 我在一个多租户环境和不同的连接(不同的架构),当我启动ab时初始化。 在我的情况下,PHP的文档有点误导,它说: PHP检查是否已经有一个完全相同的持久连接(从前面保持打开状态),如果存在,就使用它。 如果不存在,则创build链接。 一个“相同的”连接是一个连接,打开同一个主机,具有相同的用户名和相同的密码(如适用)。 http://php.net/manual/en/features.persistent-connections.php 也许它对我来说很明显,我不知道,这不适合我。 将第四个parameter passing给mysqli使得php认为连接不完全相同 […]

PDO插入查询减慢网站

在我的网站上,我编写了一个函数,向您显示每天有多less访问者和多less个综合浏览量。 问题是,有时插入查询需要永远在InnoDB中没有DELAYED INSERT函数。 编辑:这是使用InnoDB,我的意思是与长时间加载时间约6秒,而不是像0.1-0.5秒。 只要我删除日志logging的网站是快得多。 下面的$b数组包含浏览器信息,但根据XHProf的PDO查询需要很长时间才能执行。 插入代码是这样的: $values = array( 'time' => time(), 'ip' => $_SERVER['REMOTE_ADDR'], 'page' => rtrim((isset($_GET['q']) ? $_GET['q'] : 'index'), '/'), 'browser' => $b[11][0] . ' ' . $b[11][1], 'os' => $uos, 'referred' => (isset($_SERVER['HTTP_REFERER']) && !preg_match('|^' . Config::getValue('site', 'url') . '|', $_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''), ); $this->table->insert($values); 和插入function码: public function […]

什么会导致间歇SQLSTATE 没有这样的文件或目录错误从Debian Lenny的PHP PDO的MySQL?

连接通过本地主机,使用mysqld sock文件。 这些正在工作99 +%的时间,但在一些奇怪的条件下,我得到的错误: SQLSTATE[HY000] [2002] No such file or directory 相同的页面将在下一个请求中再次工作。 我唯一能想到的就是某种奇怪的文件系统错误。

在Linux上通过PHP从MS SQL Server的非模拟准备语句支持

概要 我试图使用预处理语句来停止SQL注入,但无法find我需要的支持,以确保它正常工作。 脚本 我正在Linux上托pipe一个站点,它使用FreeTDS版本0.91连接到Microsoft SQL Server,特别是使用FreeTDS的dblib 。 我已经将数据库连接的tds版本设置为7.4,并使用PHP的PDO对象。 根据FreeTDS文档 ,4.2不支持预准备语句: TDS 4.2有局限性 当然,只有ASCII码。 RPC不受支持。 BCP不受支持。 varchar字段限制为255个字符。 如果你的表定义了更长的字段,它们将被截断。 dynamic查询(也称为准备语句)不受支持。 然而没有任何信息表明7.4不支持准备好的语句,这给了我合理的信心,他们至less不会抛出驱动错误。 PHP的PDO通过PDO::setAttribute()支持特定于连接的属性。 我对PDO::ATTR_ERRMODE感兴趣,将所有错误设置为exception, PDO::ATTR_EMULATE_PREPARES强制数据库在兼容的情况下执行预处理语句。 问题 在testing连接时,我收到以下错误: 数据库错误:SQLSTATE [IM001]:驱动程序不支持此function:驱动程序不支持设置属性 无法设置PDO::ATTR_EMULATE_PREPARES ,我无法保证数据库正在按预期执行预准备语句。 有没有办法修改我的方法,或者有其他方法来保证准备好的语句在Linux上的MS SQL Server上安全地执行?

在Linux上configurationPHP框架

我正在运行Linux机器上的TinyMVC教程。 一切都工作正常,直到我到模型页面: 一旦我做了“按实例学习”一步,我得到这个错误: Error: 0 Message: Can't connect to PDO database 'mysql'. Error: SQLSTATE[HY000] [2019] Can't initialize character set UTF-8 (path: /usr/share/mysql/charsets/) File: /data/utilities/tinymvc/sysfiles/plugins/tinymvc_pdo.php Line: 107 我正在使用PHP5和PDO安装和编译(如果不是,TinyMVC会抛出一个错误)。 如果我将字符集更改为其他字符(比如UTF8或latin1),它会绕过这个错误,但是在sysfiles中还有一个错误,我不应该编辑它来获取TinyMVC的工作。 /usr/share/mysql/charsets/没有UTF-8.xml文件,但是我读到的东西build议不应该有。 有什么想法是什么问题?

“连接被远程接口拒绝的连接”与PDO连接到Firebird 3

尝试下面的代码,但会导致exception – 远程接口拒绝SQLSTATE [HY000] [335544421]连接 : try { $dbh = new PDO("firebird:dbname=localhost/3050:empty", "SYSDBA", "masterkey"); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sth = $dbh->query('SELECT idmspos, idmsqnt, cdmsval from svc$dms'); $sth->setFetchMode(PDO::FETCH_ASSOC); while($row = $sth->fetch()) { echo $row['idmspos']." ".$row['idmsqnt']." ".$row['cdmsval']."<br>"; } $dbh = null; } catch(PDOException $e) { $dbh = null; echo $e->getMessage(); } 眼镜: Linux 3.2.0-4-686-pae #1 SMP Debian 3.2.65-1+deb7u1 i686 […]

PHP的pdo – 到很多连接

我有一个angular.js应用程序与多个视图使用PHP-PDO从MySQL数据库中获取数据。 另外还有一个NodeJS应用程序每30秒获取一次数据。 来自同一个MySQL数据库。 angular色和节点应用程序在Windows服务器上运行。 当启动iis时,tcp连接迅速增加超过100个,全部都是状态“TIME_WAIT”。 是否有机会重用连接或减less彻底销毁套接字连接的等待时间?