Php 帮助排除PDO准备语句的故障

Php 帮助排除PDO准备语句的故障,php,pdo,Php,Pdo,我刚刚开始学习PDO和预处理语句(这似乎比每次都记得使用mysql_real_escape_string()要好),但我在让脚本正确执行时遇到了困难: <?php error_reporting(E_ALL); echo "start"; try{ $dbh=new PDO('mysql:host=localhost;dbname=DBNAME','USER','PWD'); } catch(PDOException $e){ echo 'Error connectin

我刚刚开始学习PDO和预处理语句(这似乎比每次都记得使用mysql_real_escape_string()要好),但我在让脚本正确执行时遇到了困难:

<?php
error_reporting(E_ALL);
echo "start";

try{
    $dbh=new PDO('mysql:host=localhost;dbname=DBNAME','USER','PWD');
} 
catch(PDOException $e){
    echo 'Error connecting to MySQL!: '.$e->getMessage();
    exit();
}

$dbh->prepare('SELECT * FROM users WHERE uid= ?');
$dbh->execute(array('15400743'));
$result=$dbh->fetchAll();
print_r($result);
echo "end";
?>

这几乎是从示例代码复制而来,但执行时只返回“start”。我已经仔细检查了我的db/user/pw。还有什么人看错了吗?谢谢

正确的方法是:

<?php
error_reporting(E_ALL);
echo "start";

try{
    $dbh=new PDO('mysql:host=localhost;dbname=DBNAME','USER','PWD');
} 
catch(PDOException $e){
    echo 'Error connecting to MySQL!: '.$e->getMessage();
    exit();
}

$stmt = $dbh->prepare('SELECT * FROM users WHERE uid= ?');
$stmt->execute(array('15400743'));
$result = $stmt->fetchAll();
print_r($result);
echo "end";
?>


注意prepare对$stmt变量的辅助作用以及之后的使用。

您可能需要设置
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)。否则,必须检查每个被调用方法的返回值。