bind param中不允许使用未定义的变量 - >如何得到错误

时间:2015-08-25 19:29:01

标签: php mysqli

我有一个简单的代码:

$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();

但我没有错误。

如何获得错误?

2 个答案:

答案 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();
}