我有一个查询INSERT
用户使用准备好的Mysql语句进入数据库。没有抛出错误,但由于某种原因,执行语句后的任何代码都没有运行。它之前的任何代码都将运行。一切看起来都很好,我不知道是什么导致了这一点。代码如下:
$SQL = "INSERT INTO `testDb`
(`email`, `id`, `created_at`, `password`, `access_token`)
VALUES
(:email, :id, :currentDate, :password, :token)";
$stmt = $DBH->prepare($SQL);
$insertArray = array(
":email" => "some Email",
":currentDate" => date('Y-m-d H:i:s'),
":id" => "some id",
":password" => "some pass",
":token" => $access_token
);
$stmt->execute($insertArray);
// All of this following code doesn't execute,
// including all the other following code after all this code
$responseData = array(
"user_id" => $DBH->lastInsertId(),
"access_token" => $access_token,
"new_user" => 1
);
print_r($responseData);
echo 'TESTTTTTT';
当没有执行任何代码时,我的意思是没有任何内容被打印出来,或者在此代码下面的任何非侦听功能也都被执行。但是当$stmt->execute($insertArray);
被注释掉时,下面的所有其他内容都会被执行。
编辑: 错误属性在文件的开头设置,所有内容都已包装在try / catch中。这是设定的内容:
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors','1');
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$DBH->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
尝试了所有建议,但没有任何效果,没有错误被抛出。唯一有用的是评论这两行:
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$DBH->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
之后被注释掉,其余代码执行,但似乎现在无法从db获取任何数据,例如。所有获取数组都是空的,即使它们不应该是空的。
答案 0 :(得分:0)
尝试将这两行放在所有代码
之上error_reporting(-1);
ini_set('display_errors', 1);
答案 1 :(得分:0)
如前所述,在任何代码之前放置此代码以使PDO抛出异常:
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
然后使用try...catch
块包装有问题的代码,以便您可以确定究竟发生了什么。