我有一个简单的代码:
$SQL = $db->prepare(
"INSERT INTO tbl_signup (full_name,email,telephone,password) VALUES (?,?,?,?)");
$SQL->bind_param('ssss', $full_name, $signup_email,$telephone, $password);
$SQL->execute();
此代码不起作用。没有在bdd中插入行。没错。什么都没有。
当我之前添加时:
$full_name = $signup_email = $telephone = $password = "";
代码有效。
结论:bindparam不允许使用未定义的变量。
但是如何在我的案例中得到错误?
我尝试了所有:
$SQL->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$SQL->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$SQL->execute();
echo "\nPDO::errorCode(): ", $SQL->errorCode();
print_r($SQL->errorInfo());
$SQL->debugDumpParams();
但我没有错误。
如何获得错误?
答案 0 :(得分:1)
您的第一个问题是您设法将mysqli(您实际使用的)与PDO混淆。
你的第二个问题是你的结论是错误的。如果您运行SELECT查询,您会看到该查询正在运行。
你的第三个问题是缺少mysqli错误报告。在连接之前添加此行:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
并且您将能够看到转换为PHP异常的mysql错误。很可能在没有空值时插入空值
答案 1 :(得分:-1)
检查那里:http://php.net/manual/en/pdo.error-handling.php
并且:http://php.net/manual/en/class.pdoexception.php
将您的代码重写为:
try {
<..>
$SQL->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$SQL->execute();
} catch (PDOException $e) {
echo 'Something wrong: ' . $e->getMessage();
}