所以我有以下代码,大部分改编自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
并在我的数据库中留下了问号(如何拟合),我仍然无法解决它。
答案 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