Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
绑定参数致命错误PHP SQL_Php_Html_Mysql - Fatal编程技术网

绑定参数致命错误PHP SQL

绑定参数致命错误PHP SQL,php,html,mysql,Php,Html,Mysql,我对PHP和SQL协同工作的主题非常陌生,到目前为止,除了更新我的SQL数据库上的数据库行之外,我一直都很好。我正在使用讲师的部分代码,做练习和自己的任务来修改网页和行为 此代码的目的是更新我已设置的文章,以便编辑标题或代码,然后单击“确认”,但当我执行此操作时,会收到失败的返回消息,告诉我绑定参数失败。我经常在用其他语言传递参数时遇到困难,我已经观察和测试了几个小时,希望能收到一些关于这个主题的信息和指导 我只想更新articletext和articletitle字段。数据库中还有另外3个字段

我对PHP和SQL协同工作的主题非常陌生,到目前为止,除了更新我的SQL数据库上的数据库行之外,我一直都很好。我正在使用讲师的部分代码,做练习和自己的任务来修改网页和行为

此代码的目的是更新我已设置的文章,以便编辑标题或代码,然后单击“确认”,但当我执行此操作时,会收到失败的返回消息,告诉我绑定参数失败。我经常在用其他语言传递参数时遇到困难,我已经观察和测试了几个小时,希望能收到一些关于这个主题的信息和指导

我只想更新articletext和articletitle字段。数据库中还有另外3个字段blogID、blogtime和blogposter,它们不需要更改

如果查看底部的结果,您将看到变量确实包含信息,但没有更新到数据库中,相反,进程在bind_param部分崩溃


我的编辑文章代码部分:
根据
您应该将参数设置为

那么,行吗

     $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=?;'.