使用PDO,如何输出正在执行的实际查询?

时间:2018-02-22 20:00:43

标签: mysql pdo

我不确定以下代码有什么问题:它不会抛出错误但它也不会返回任何实际数据。

  • 如果它正在运行我想要的查询(SELECT * FROM heroes WHERE year_month = 2),它应该返回数据。

  • 当我在phpMyAdmin中运行相同的查询时,它会返回一条记录。

因此,合乎逻辑的第一步是验证查询是否正确。是否可以显示正在执行的实际查询,包括变量参数?如果没有,有没有人看到其他明显的问题?

$host = 'localhost';
$db   = 'hero_images';
$user = 'sqlmin';
$pass = '***********';
$charset = 'utf8mb4';

$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
try {
    $pdo = new PDO("mysql:host=$host;dbname=$db;charset=$charset", $user, $pass, $options);
} catch (PDOException $e) {
    echo $e->getMessage()."<br>";
    die();
}

$id = 2;

$sql = "SELECT * FROM `heroes` WHERE `year_month`=:year_month";
$stmt = $pdo->prepare($sql);
$stmt->execute(['year_month' => $id]); 
$row = $stmt->fetch(PDO::FETCH_NUM);

echo "<br />row['h1_website'] = ".$row['h1_website'];
echo "<br />row['h1_tablet'] = ".$row['h1_tablet'];
echo "<br />row['h1_mobile'] = ".$row['h1_mobile'];

$pdo = null;

提前致谢...

0 个答案:

没有答案