php - 如何从PDO PHP 中的prepare() 获取查询错误?

标签 php mysql pdo

    $st = $db->prepare("SELECT * FROM c6ode");

如何检查上述情况下查询的故意 mysql 错误?

最佳答案

您需要将错误模式属性PDO::ATTR_ERRMODE设置为PDO::ERRMODE_EXCEPTION

由于您预计 prepare() 方法会引发异常,因此您应该禁用 PDO::ATTR_EMULATE_PREPARES 功能。否则,MySQL 服务器在执行该语句之前不会“看到”该语句。

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->prepare('INSERT INTO DoesNotExist (x) VALUES (?)');

打印(或日志,取决于 PHP 设置)

SQLSTATE[42S02]: Base table or view not found: 
1146 Table 'test.doesnotexist' doesn't exist

关于php - 如何从PDO PHP 中的prepare() 获取查询错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59804533/

相关文章:

php - 单词 "Array"被打印而不是行的值

php - 使用 PDO 在两个数据库之间传输 mysql 表

php - PHP5保护变量背后的推理

PHP 获取一个月的周数

php - 如何在 WordPress 中为其他子网站共享 WP_POST

php - 在 php.ini 文件中添加扩展条目后,sqlsrv 驱动程序不会出现在 WAMP 服务器 phphinfo() 上

javascript - php根据html切换开关显示数据库中的数据

php - 如何强制下载服务器上存储的pdf文件?

php - 将数组发送到 Blade 组件 (Laravel 8)

sql - 问题 : mysql Subqueries