我在这里搜索了我的问题的答案。有些人可能已经在这里回答了其他版本或驱动程序。这个答案对我的发展有很大帮助。
我PDOStatement::prepare()
的回归真实。但我的PDOStatement::execute();
回报是假的。
然而,这些行已成功插入数据库中。我在 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.