准备语句/ bindValue的问题

时间:2015-05-09 03:54:30

标签: php sqlite

所以我有以下代码,大部分改编自php.net's SQLite3 prepare statement page的例子。

$stmt = $db->prepare("INSERT INTO users ( accesstoken, authed, ckey, staff) VALUES (':password', 'false', ':ckey' ,'true');");
$stmt->bindValue(':ckey',$_POST["ckey"]);
$hashedpw = password_hash($veri_password, PASSWORD_DEFAULT);
$stmt->bindValue(':password',$hashedpw);
$result = $stmt->execute();

我认为它会起作用,但是当我手动查看数据库时,我看到了:

:ckey, :password, false, false作为插入的行。 我似乎无法修复它,我尝试删除它周围的引号并反而引发错误。我交换了引用类型,并且得到了一个未定义的列或其他错误。

以下是代码的片段:

$stmt  = $db->prepare("select * from `users` WHERE ckey = :ckey");
$stmt->bindValue(":ckey",$_POST["ckey"]);
$result = $stmt->execute();

这很好但是它是一个select查询而不是insert,它只有一个值可以绑定。我已经查看了至少10-15个相关问题,仍然无法解决问题,其中一个建议使用'代替",但这并没有解决另一个问题使用?代替:ckey并在我的数据库中留下了问号(如何拟合),我仍然无法解决它。

1 个答案:

答案 0 :(得分:1)

问题在于引号更改

$stmt = $db->prepare("INSERT INTO users ( accesstoken, authed, ckey, staff) VALUES (':password', 'false', ':ckey' ,'true');");

$stmt = $db->prepare("INSERT INTO `users` ( accesstoken, authed, ckey, staff) VALUES (:password, 0, :ckey ,1)");

归功于Cfreak