【发布时间】:2011-07-06 13:07:38
【问题描述】:
我对 PDO mysql 查询有疑问
这是我的简单代码(不是真实情况,只是为了向您展示问题)
$connexion = new PDO(SQL_DSN, SQL_USERNAME, SQL_PASSWORD);
$stmt = $connexion->prepare('SELECT * from missions,platforms WHERE missions_platforms_id = exl_platforms_id AND missions_id = :mission');
$stmt->execute(array(":mission" => '1'));
$ligne = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($stmt);
$stmt = $connexion->prepare('SELECT * from missions,platforms WHERE missions_platforms_id = exl_platforms_id AND missions_id = :mission');
var_dump($stmt);
$stmt = $connexion->prepare('SELECT * from missions,platforms WHERE missions_platforms_id = exl_platforms_id AND missions_id = :mission');
var_dump($stmt);
和输出:
object(PDOStatement)[2]
public 'queryString' => string 'SELECT * from missions,platforms WHERE missions_platforms_id = platforms_id AND missions_id = :mission' (length=122)
boolean false
object(PDOStatement)[2]
public 'queryString' => string 'SELECT * from missions,platforms WHERE missions_platforms_id = platforms_id AND missions_id = :mission' (length=122)
为什么第二个 var_dump 返回 false ?
如果我多次执行相同的架构,则一半时间返回 false...
谢谢你
【问题讨论】:
-
是否打印了任何 PHP 错误?尝试在该代码之前添加
error_reporting(E_ALL | E_STRICT); ini_set('display_errors', true);。 -
还可以尝试添加 PDO::errorInfo 调用 - 请参阅此处的示例:php.net/manual/en/pdo.errorinfo.php
-
在其他无缓冲查询处于活动状态时无法执行查询。考虑使用 PDOStatement::fetchAll()。或者,如果您的代码只针对 mysql 运行,您可以通过设置 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性来启用查询缓冲。谢谢迈克!