感谢SO社区中的许多人,我一直在尝试将所有内容转换为PDO。我有一个INSERT INTO语句,我尝试转换为PDO,但它没有插入。我也没有收到任何错误。
以下是我试图转换的内容:
<?php
session_start();
$con = mysql_connect("host", "username", "password", "DBname");
$username = $_SESSION['username'];
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("dbname", $con);
mysql_query("INSERT INTO badge_status (username, badge1)
VALUES ('$username', 'finished')");
mysql_close($con);
?>
PDO版
<?php
session_start();
$db = new PDO('mysql:host=hostname;dbname=dbname;charset=UTF-8', 'username', 'password');
$username = $_SESSION['jigowatt']['username'];
$awardFinished = $db->prepare('INSERT INTO badge_status (username, badge1) VALUES ('$username', 'finished')');
?>
如果你能抓住正在发生的事情或者可以解决这个问题,那就谢谢了!
答案 0 :(得分:10)
使用$awardFinished = $db->prepare(...);
准备语句后,必须执行它:
$awardFinished->execute();
此外,我不确定这只是您的帖子或实际代码中的错误,但您在此处使用了无效的单引号:
$db->prepare('INSERT INTO badge_status (username, badge1) VALUES ('$username', 'finished')');
无论修复 ,你都在使用预备声明;您不应该直接将变量插入查询中。
尝试更新至:
$awardFinished = $db->prepare('INSERT INTO badge_status (username, badge1) VALUES (:username, "finished")');
$awardFinished->execute(array(':username' => $username));
答案 1 :(得分:2)
我看到的第一个问题是查询中的那些单引号,你需要转义它们:
'INSERT INTO badge_status (username, badge1) VALUES (\'$username\', \'finished\')'
接下来,您需要execute
声明:
$awardFinished->execute();
您不会收到错误,因为您需要告诉PDO抛出这样的异常:
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
// .. prepare ..
$awardFinished->execute();
} catch (PDOException $e) {
echo $e->getMessage();
}