gpt4 book ai didi

php - 如何使用 PDO 准备语句从 MySQL 中获取有意义的错误消息?

转载 作者:行者123 更新时间:2023-11-29 00:53:50 25 4
gpt4 key购买 nike

假设我有下表:

mysql> CREATE TABLE example (
-> `id` INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
-> `stuff` VARCHAR(255) NOT NULL
-> );
Query OK, 0 rows affected (0.06 sec)

stuff 列被声明为 NOT NULL。当在准备好的语句中将空值传递给它时,它自然会失败。因此:

mysql> PREPARE test FROM "INSERT INTO example (stuff) VALUES (?)";
Query OK, 0 rows affected (0.00 sec)
Statement prepared

mysql> SET @a = NULL;
Query OK, 0 rows affected (0.00 sec)

mysql> EXECUTE test USING @a;
ERROR 1048 (23000): Column 'stuff' cannot be null

错误消息 Column 'stuff' cannot be null 非常清楚。但是当我使用 PDO 的绑定(bind)参数执行完全相同的查询时,它不会给我该错误消息。这是一个示例脚本:

<?php

$host = 'localhost';

$user = 'fakeuser';
$pass = 'fakepass';
$db_name = 'fakedb';

$dsn = "mysql:host=$host;port=3306;dbname=$db_name";

// Connect to the database.
try {
$DB = new PDO(
$dsn,
$user,
$pass,
array(PDO::ATTR_PERSISTENT => true)
);
} catch (PDOException $e) {
print "Unable to connect to database.\n";
exit;
}

// Make sure everything is handled in the UTF-8 character set.
$DB->exec('SET NAMES UTF8');

$SQL = 'INSERT INTO example (stuff) VALUES (:stuff)';

$query = $DB->prepare($SQL);

$values = array(
':stuff' => null,
);

$saved = $query->execute($values);

print "\$saved is:\n";
var_dump($saved);
print "\n\n";

print "Error code is:\n";
var_dump($DB->errorCode());
print "\n\n";

print "Error info is:";
var_dump($DB->errorInfo());
print "\n\n";

输出如下:

$ php test.php

$saved is:
bool(false)

Error code is:
string(5) "00000"

Error info is:array(3) {
[0]=>
string(5) "00000"
[1]=>
NULL
[2]=>
NULL
}

通过 PHP 返回给我的调试信息都没有用。我怎样才能让它给我真正的错误消息而不是这个 00000 垃圾?

最佳答案

尝试使用 $query->errorInfo() 代替。

关于php - 如何使用 PDO 准备语句从 MySQL 中获取有意义的错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7099369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com