PDO INSERT语句未插入

时间:2012-11-08 20:27:20

标签: php mysql pdo

感谢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')');
?>

如果你能抓住正在发生的事情或者可以解决这个问题,那就谢谢了!

2 个答案:

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