我在这里搜索了我的问题的答案。有些人可能已经在这里回答了其他版本或驱动程序。这个答案对我的发展有很大帮助。
我的PDOStatement::prepare()
正在返回true。但我的PDOStatement::execute();
返回false。
然而,行正在数据库中成功插入。我在php.net中搜索了问题以及PDO文档。我的搜索顺其自然。
我的简单插入代码如下:
// get current rank into a variable //
$sql = 'SELECT count(email)+1 AS RANK FROM users_main';
$pre = $dbc->prepare($sql);
if($pre){
$pre->execute(array($email)); // <-- working good ...
$res = $pre->fetchObject();
if($res)$rank=(string)$res->RANK;else $rank='';
}
// now inserting new user into the table as per his new rank.
$usercode = substr(md5(gzencode($email)),0,10);
$activationcode = md5(gzencode(substr(md5($email),0,10)));
// inserting the actual row into db ...
$sql = "INSERT INTO users_main(email,usercode,activation_code,current_rank) VALUES (?,?,?,?)";
$pre = $dbc->prepare($sql);
// debugging ...
echo '<pre>';
try {
$pre->execute(array($email,$usercode,$activationcode,$rank)); // <-- PROBLEM IS HERE . RETURNING FALSE.
}catch(Exception $e){
echo $e->getMessage(); // <-- NO ERROR MESSAGE
}
echo '<br><br>';
print_r($dbc->errorInfo()); // <-- here sqlstate is 0000
echo '</pre>';
/*$emailSubject = 'Welcome Mail!';
$emailLink = '?b='.$activationCode;
if(insertEmailQueue('W',$email,$emailSubject,$emailLink))return true;else return false;
}*/
添加上述信息后,我检查了我要插入的每个列的数据类型。一切都很好看。 回答这个问题对我很有帮助。
我正在调试上面的代码而我正在尝试更改以获取错误。我已经更改了以下代码:
try {
$res = $pre->execute(array($email,$usercode,$activationcode,$rank)); // <-- PROBLEM IS HERE . RETURNING FALSE.
}catch(PDOException $e){
echo $e->getMessage(); // <-- NO ERROR MESSAGE
}
echo '<br><br>';
print_r($dbc->errorInfo()); // <-- here sqlstate is 0000
echo '<br><br>';
print_r($dbc->errorCode());
echo '<br><br>';
print_r($pre->errorCode());
echo '</pre>';
结果如下:
Array
(
[0] => 00000
[1] =>
[2] =>
)
00000
23000 // <-- this is a fatal error as per the documentation.
答案 0 :(得分:-1)
经过两天的努力才知道错误是什么,最后我通过尝试获取错误和其他互联网引用找到了。我改变的是
....
// now inserting new user into the table as per his new rank.
$usercode = addslashes(substr(md5(gzencode($email)),0,10));
$activationcode = addslashes(md5(gzencode(substr(md5($email),0,10))));
....
addslashes()
是逃避不可接受的角色的原始方式之一。
我仍然想知道,为什么MySQL接受语句,插入行并在插入后返回false。如果我发现为什么会出现这个奇怪的问题,我会更新答案。
谢谢大家的帮助。