Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.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 MySQLi更新有一列错误_Php_Mysqli - Fatal编程技术网

Php MySQLi更新有一列错误

Php MySQLi更新有一列错误,php,mysqli,Php,Mysqli,我使用的查询(来自php)是 我得到了错误 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“desc='hello'WHERE stitle='banana'附近要使用的正确语法 如果我删除desc='.”$\u POST['desc']”则查询有效。字段“desc”是varchar(150)。我可以直接从phpMyAdmin插入文本,该字段明确地称为“desc”,并且$\u POST['desc']明确地捕获一个值(我尝试使用echo$\u POST['desc'];

我使用的查询(来自php)是

我得到了错误

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“desc='hello'WHERE stitle='banana'附近要使用的正确语法

如果我删除
desc='.”$\u POST['desc']”
则查询有效。字段“desc”是varchar(150)。我可以直接从phpMyAdmin插入文本,该字段明确地称为“desc”,并且
$\u POST['desc']
明确地捕获一个值(我尝试使用
echo$\u POST['desc'];
并传递一个值)。我尝试将代码更改为
desc='test'
,但没有成功


有什么想法吗?

问题是你的$\u帖子['desc']包含撇号。我建议您在所有参数上使用函数mysqli\u real\u escape\u string(doc:)

另外,尝试用反勾号转义所有行和表,以避免保留字产生错误

您的查询示例如下所示:

"UPDATE `articles` SET `title` = '".mysqli::real_escape_string($_POST['title'])."', `contents` = '".mysqli::real_escape_string($_POST['cont'])."',  `category` = '".mysqli::real_escape_string($_POST['cat'])."',  `desc` = '".mysqli::real_escape_string($_POST['desc'])."'  WHERE `stitle` = '".mysqli::real_escape_string($_POST['stitle'])."'";
如果使用对mysqli函数的过程式调用进行编程,请使用:

"UPDATE `articles` SET `title` = '".mysqli_real_escape_string($link, $_POST['title'])."', `contents` = '".mysqli_real_escape_string($link, $_POST['cont'])."',  `category` = '".mysqli_real_escape_string($link, $_POST['cat'])."',  `desc` = '".mysqli_real_escape_string($link, $_POST['desc'])."'  WHERE `stitle` = '".mysqli_real_escape_string($link, $_POST['stitle'])."'";
(显然,在执行mysqli_connect()时,将$link替换为初始化的变量)

使用这些函数,可以避免这些错误,还可以避免大量SQL攻击。如果变量包含整数,则不需要这样做,但是,始终需要检查传递给SQL引擎的数据以避免出现问题


进行一些检查是一种很好的做法,例如,测试谁的整数变量包含整数,或者使用mysqli::real\u escape\u字符串执行escape。而且,如果输入数据有错误,请停止进程,不要请求SQL查询。

我设法解决了这个问题。我在表中创建了一个新列,将“desc”中的信息复制到该列中,删除了“desc”。我用新的列名运行了查询,它运行正常。我不知道问题出在哪里,但这解决了问题。

问题可能出在您的
$\u POST['cat']
值中。您应该为响应使用带有绑定参数hanks的准备语句。我试试看,不行。没用。我把它改成了
$tit=$\u POST['title']$stit=$_POST['stitle']$cont=$_POST['cont']$desc=$_POST['desc']$cat=$_POST['cat']
更新文章集标题='“$tit.”,内容='“$cont.”,类别='“$cat.”,说明='“$desc.”,其中针脚=”$stit.”相同错误。感谢您的回复。它生成了错误
非静态方法mysqli::real\u escape\u string()不能静态调用
。当我删除'desc'列时,我本以为它不会发布。我按照更正了真实的_escape_字符串代码,并再次得到原始错误。如果检查文档,则函数有另一种调用形式。如果在代码中使用过程样式,请将所有mysqli::real\u escape\u string()替换为mysqli\u real\u escape\u string($link,$escapestr),其中$link是您在mysqli\u connect()上创建的变量,$escapestr是要清除的$\u POST变量。尝试用“``来转义行名(例如:
desc
=…)。我已经用这个语法更正了答案。我更正了,我又回到了原来的错误。我敢肯定它对名为“desc”的专栏有异议,但我不知道为什么。它的设置方式与其他两列相同。它肯定被称为'desc',我可以查询MySqli并返回'desc'中的信息。它似乎不想更新。可能是列名本身的问题。为了避免这些问题,我已经用转义更新了答案。如果你愿意,你可以检查一下。我很感谢你的努力。谢谢
"UPDATE `articles` SET `title` = '".mysqli_real_escape_string($link, $_POST['title'])."', `contents` = '".mysqli_real_escape_string($link, $_POST['cont'])."',  `category` = '".mysqli_real_escape_string($link, $_POST['cat'])."',  `desc` = '".mysqli_real_escape_string($link, $_POST['desc'])."'  WHERE `stitle` = '".mysqli_real_escape_string($link, $_POST['stitle'])."'";