Php PDO INSERT语句未插入

Php PDO INSERT语句未插入,php,mysql,pdo,Php,Mysql,Pdo,多亏了社区中的很多人,所以我一直在尝试将一切都切换到PDO。我有一个INSERT INTO语句,我尝试将其转换为PDO,但它没有插入。我也没有收到任何错误 以下是我试图转换的内容: <?php session_start(); $con = mysql_connect("host", "username", "password", "DBname"); $username = $_SESSION['username']; if (!$con) { die('Could not c

多亏了社区中的很多人,所以我一直在尝试将一切都切换到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')');
?>

谢谢,如果你能知道发生了什么或能解决这个问题

在您使用$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));

我看到的第一个问题是查询中的那些单引号,您需要对它们进行转义:

'插入徽章\'u状态用户名,徽章1值\'$username\',\'finished'\

接下来,您需要执行该语句:

$awardFinished->execute

您不会得到错误,因为您需要告诉PDO抛出如下异常:

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try {
    // .. prepare ..
    $awardFinished->execute();
} catch (PDOException $e) {
    echo $e->getMessage();
}

请阅读手册。您甚至不知道如何连接字符串。如果您使用PDO,这很好,那么您必须使用该功能来正确转义数据。不要在危险不安全的mysql_查询样式中使用它。我已经使用过,如果我没有,我不会发布这个。这本手册并不像许多人想象的那样有用。这本手册有很多例子,但也有更好的例子。请先阅读“准备好的语句”部分。@tadman,请不要派人去NetTutsPlus,因为该教程中的代码是可注入的。相反,你应该引导人们:这起作用了!非常感谢你。我可以用真正的有形代码更快地学习这些东西。当10分钟的时限过去后,我会接受这个答案。再次感谢你@AoiHana一点问题都没有,我很高兴能帮上忙!刚刚看到NewFurniture的答案。。。我太喜欢你了!这同样有效。非常感谢你的帮助!