绑定参数致命错误PHP SQL
我对PHP和SQL协同工作的主题非常陌生,到目前为止,除了更新我的SQL数据库上的数据库行之外,我一直都很好。我正在使用讲师的部分代码,做练习和自己的任务来修改网页和行为 此代码的目的是更新我已设置的文章,以便编辑标题或代码,然后单击“确认”,但当我执行此操作时,会收到失败的返回消息,告诉我绑定参数失败。我经常在用其他语言传递参数时遇到困难,我已经观察和测试了几个小时,希望能收到一些关于这个主题的信息和指导 我只想更新articletext和articletitle字段。数据库中还有另外3个字段blogID、blogtime和blogposter,它们不需要更改 如果查看底部的结果,您将看到变量确实包含信息,但没有更新到数据库中,相反,进程在bind_param部分崩溃绑定参数致命错误PHP SQL,php,html,mysql,Php,Html,Mysql,我对PHP和SQL协同工作的主题非常陌生,到目前为止,除了更新我的SQL数据库上的数据库行之外,我一直都很好。我正在使用讲师的部分代码,做练习和自己的任务来修改网页和行为 此代码的目的是更新我已设置的文章,以便编辑标题或代码,然后单击“确认”,但当我执行此操作时,会收到失败的返回消息,告诉我绑定参数失败。我经常在用其他语言传递参数时遇到困难,我已经观察和测试了几个小时,希望能收到一些关于这个主题的信息和指导 我只想更新articletext和articletitle字段。数据库中还有另外3个字段
我的编辑文章代码部分:
根据
您应该将参数设置为
那么,行吗
$updatesql="UPDATE blogarticle SET articletitle='$articletitle', articletext='$articletext' WHERE articleid='$articleid'";
应该成为
$updatesql="UPDATE blogarticle SET articletitle=?, articletext=? WHERE articleid=?";
更新
错误也可能取决于您的查询。检查的返回值
$db->prepare
如中所述
在使用绑定参数()替换查询中的?
之前,您似乎还没有为$article
设置值。
bind_param
中的数据类型参数也需要加引号
此外,一些错误检查也会很好
<?php
$db=createConnection();
// get the first two articles
$sql = "select blogID,articletitle,articletext,
blogtime,blogposter,username,userid
from blogarticle
join registerdemo on blogposter = userid
where blogID=?";
$stmt = $db->prepare($sql);
if (!$stmt) {
echo $stmt->error;
exit;
}
// need to give $article a value before you try and use it
// also the datatype parameter need to be in quotes
$stmt->bind_param('i',$article);
$stmt->execute();
if (!$stmt) {
echo $stmt->error;
exit;
}
对布尔值上的成员函数bind_param()的调用
我猜第18行是这样的:
$doupdate->bind_param("ssi",$articletitle, $articletext, $articleid);
这意味着$doupdate
是布尔值。其值在前一行中设置:
$doupdate=$db->prepare($updatesql);
您提供的代码没有透露任何关于数据库集成的信息,也没有在代码中提供任何解释,但是方法名称看起来像mysqli,因此您可能希望插入:
if ($db->error) {
die ($db->error);
}
该错误可能是密码错误、网络问题,或者是由于没有在查询中选择DB/指定它。感谢大家的发布。这最终是通过每个人的建议来解决的,这些人都发布了关于如何设置和传递值的信息
另请注意,如果我发布更多关于我使用的数据库的详细信息,用户可以更早地解决此问题。
我正在查看$articleid并将其作为这个变量传递回数据库,但是$articleid有一个来自数据库blogID的设置值。articleid在数据库中不作为列存在
为了解决这个问题,我只添加了以下两行代码:
$blogID=$_POST['blogID'];
$blogID=$articleid;
然后改变了:
'WHERE articleid=?;' to 'WHERE blogID=?;'.
您需要将错误处理添加到数据库调用中。首先,您需要用占位符替换注入的变量:。。。设置articletitle=?,…
。你能给我一个例子说明你的意思吗?请看下面的答案。哦,不要问同一个问题两次!prepare()方法必须无法生成准备好的语句。因为看起来您使用的是某种包装类,而不是原始PDO,所以我无法进一步说明任何其他可能错误的地方,但是当调用可能失败的方法时,您必须始终准备好处理失败(如果该方法未返回预期结果或引发异常,具体取决于该方法中如何处理故障)OP使用的不是PDO,而是mysqli;bind_param()<代码>是一个MySQL方法,不存在于PDO中。也没有命名的占位符。OOPS,我没有想到……肯定是PDO…SoRRYI已经这样做了,我实际上是做了这件事,但改变了它只是为了“实验”。。尽管问题仍然存在,但始终是绑定参数行失败,即使在类似的代码上也是如此,但这篇文章就不行了。你能打印出变量的值吗(特别是$articleid)是的,当我使用print_r($\u POST)时,它会显示这些-Array([articleid]=>9[articleight]=>这是一个测试[articletext]=>测试测试(测试测试).据我所知,这是正确的,因为变量已填充。这是正确的吗?嘿,RiggsFolly,谢谢你的回答。我确实为这个变量设置了一个值集,因为我没有添加整个代码,只是添加了与applychanges.php通信的部分,因为这是问题所在。我为$article'$article=$\u GET['aID'设置了这个值集'。当我在文章上选择“编辑”时,它允许我编辑它,重新提交它似乎不起作用。我以前在这个网站上发布过完整的代码,并且被告知不要再这样做,所以这就是我这样做的原因。你是说我应该发布整个代码页吗?不一定是完整的代码,但我爱你,这是我的一个错误。我很抱歉我们将在下次发布更详细的内容。至于这个问题,是数据库标题和集成。不一定要更详细-您只需要更系统地进行分析,并将代码减少到再现故障所需的最低限度。
'WHERE articleid=?;' to 'WHERE blogID=?;'.