Tag: Pdo

在PDO中使用持续连接的缺点是什么?

在PDO中,可以使用PDO::ATTR_PERSISTENT属性使连接持久化。 根据PHP手册 – 持久性连接在脚本结束时没有closures,但在另一个脚本使用相同凭据请求连接时被caching和重新使用。 持久连接caching允许您避免每次脚本需要与数据库通信时build立新连接的开销,从而导致更快的Web应用程序。 本手册还build议在使用PDO ODBC驱动程序时不要使用持久连接,因为这可能会妨碍ODBC连接池过程。 显然在PDO中使用持久连接似乎没有什么缺点,除了最后一种情况。 但是,我想知道使用这种机制是否还有其他的缺点,即这种机制会导致性能下降或类似的情况。

如何使用PDO从MySQL获取数字types?

我正在使用PDO和MySQL,出于某种原因从数据库中获取值为inttypes的值时,PDOStatement返回的是数字的string表示forms,而不是数值types的值。 我如何防止这种情况发生? 我注意到有一个PDO类的属性: PDO::ATTR_STRINGIFY_FETCHES应该照顾这个,但是,当试图修改它,它会抛出一个错误,说该属性是无效的MySQL驱动程序。 咨询数据库时,获取string而不是数字是否正常?

bindParam和bindValue有什么区别?

PDOStatement::bindParam()和PDOStatement::bindValue()什么PDOStatement::bindValue() ?

PHP – 与IN子句数组一起使用PDO

我正在使用PDO执行一个IN语句的语句,该语句使用数组作为其值: $in_array = array(1, 2, 3); $in_values = implode(',', $in_array); $my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (".$in_values.")"); $my_result->execute(); $my_results = $my_result->fetchAll(); 上面的代码工作得很好,但我的问题是为什么这不: $in_array = array(1, 2, 3); $in_values = implode(',', $in_array); $my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (:in_values)"); $my_result->execute(array(':in_values' => $in_values)); $my_results = $my_result->fetchAll(); 此代码将返回my_value等于$in_array (1)中的第一项的项目,但不返回数组中剩余的项目(2和3)。

准备PDO在单个查询中插入多行

我目前在MySQL上使用这种types的SQL来在单个查询中插入多行值: INSERT INTO `tbl` (`key1`,`key2`) VALUES ('r1v1','r1v2'),('r2v1','r2v2'),… 在PDO的阅读上,使用准备好的语句应该比静态查询提供更好的安全性。 因此,我想知道是否可以使用预处理语句生成“通过使用一个查询插入多行值”。 如果是的话,我可否知道我该如何执行?

行数与PDO

周围有许多相互矛盾的陈述。 在PHP中使用PDO进行排列计数的最佳方法是什么? 在使用PDO之前,我只是简单地使用了mysql_num_rows 。 fetchAll是我不想要的东西,因为我有时可能会处理大型数据集,所以不适合我的使用。 你有什么build议吗?

PDO支持多个查询(PDO_MYSQL,PDO_MYSQLND)

我知道PDO不支持在一个语句中执行多个查询。 我一直在Googleing,发现有几篇文章谈论PDO_MYSQL和PDO_MYSQLND。 PDO_MySQL比其他传统的MySQL应用程序更危险。 传统的MySQL只允许一个SQL查询。 在PDO_MySQL中没有这样的限制,但是你有被多次查询注入的风险。 来自: 使用PDO和Zend Framework防止SQL注入 (2010年6月,由Julian提供) 看起来像PDO_MYSQL和PDO_MYSQLND确实提供了对多个查询的支持,但我无法find更多关于它们的信息。 这些项目是否中断? 现在有什么办法可以使用PDO运行多个查询。

如何正确设置PDO连接

有时我会看到有关连接到数据库的问题。 大多数答案不是我做的方式,或者我可能只是不正确地得到答案。 无论如何; 我从来没有想过,因为我这样做的方式适用于我。 但是这是一个疯狂的想法。 也许我这样做是完全错误的,如果是这样的话; 我真的想知道如何正确连接到使用PHP和PDO的MySQL数据库,并使其易于访问。 以下是我如何做到这一点: 首先,我的文件结构(剥离) : public_html/ * index.php * initialize/ — load.initialize.php — configure.php — sessions.php 的index.php 在最顶层,我require('initialize/load.initialize.php'); 。 load.initialize.php # site configurations require('configure.php'); # connect to database require('root/somewhere/connect.php'); // this file is placed outside of public_html for better security. # include classes foreach (glob('assets/classes/*.class.php') as $class_filename){ include($class_filename); } # […]

如何从PDO挤出错误信息?

我似乎无法从PDO得到任何错误消息: #$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); try { $sth = $dbh->prepare('@$%T$!!!'); print_r($sth); print_r($dbh->errorInfo()); } catch (PDOException $e) { echo $e->getMessage(); } 它只是发出: PDOStatement Object ( [queryString] => @$%T$!!! ) Array ( [0] => 00000 [1] => [2] => ) setAttribute没有任何帮助。 它是PHP 5.3.3的Apache 2.0处理程序 启用MySQL的PDO驱动程序 客户端API版本mysqlnd 5.0.7-dev – 091210 – $ Revision:300533 $ 我能做些什么来获取错误信息?

如何在LIMIT子句中应用bindValue方法?

这里是我的代码的快照: $fetchPictures = $PDO->prepare("SELECT * FROM pictures WHERE album = :albumId ORDER BY id ASC LIMIT :skip, :max"); $fetchPictures->bindValue(':albumId', $_GET['albumid'], PDO::PARAM_INT); if(isset($_GET['skip'])) { $fetchPictures->bindValue(':skip', trim($_GET['skip']), PDO::PARAM_INT); } else { $fetchPictures->bindValue(':skip', 0, PDO::PARAM_INT); } $fetchPictures->bindValue(':max', $max, PDO::PARAM_INT); $fetchPictures->execute() or die(print_r($fetchPictures->errorInfo())); $pictures = $fetchPictures->fetchAll(PDO::FETCH_ASSOC); 我明白了 你的SQL语法有错误; 检查对应于您的MySQL服务器版本的手册,在第1行的'15',15'附近使用正确的语法 看来PDO在SQL代码的LIMIT部分中将单引号添加到我的variables中。 我查了一下,我发现这个bug,我认为是相关的: http : //bugs.php.net/bug.php?id=44639 那是我在看什么? 这个错误已经从2008年4月开始! 我们在这期间应该做什么? 我需要build立一些分页,并且在发送sql语句之前需要确保数据是干净的,sql注入安全的。