我在这个UPDATE上做错了什么?库MySQLi

时间:2018-05-23 19:26:16

标签: php mysqli

遵循以下语法:

这是用于将数据修改为MySQL表的save命令的通用SQL语法 -

UPDATE

来自https://www.tutorialspoint.com/mysqli/mysqli_update_query.htm

我做到了:

UPDATE table_name SET field1 = new-value1, field2 = new-value2 [WHERE Clause]

但是在线:

$query = mysqli_query($MYSQL_CONNECT, "UPDATE forum_topics SET player_userid = ".$player_userid.", titulo = ".$titulo.", msg = ".$msg.", data = ".$data." WHERE UserID=".$inTopic."");
mysqli_query($MYSQL_CONNECT,$query);

显示:

  

mysqli_query():第30行/var/www/html/ucp/php_func/edit_topic.php中的空查询

2 个答案:

答案 0 :(得分:1)

主要问题是您尝试执行两次的查询。第二次尝试无效,因为在需要字符串查询的地方,你要么传递一个结果对象,要么传递一个布尔值(如果第一个查询失败)。

只需执行一次

的查询
$query = mysqli_query($MYSQL_CONNECT, "...");

然后$query中的值就是结果。

另外,您遇到的问题是您的代码对SQL injection开放,而且您没有检查错误。如果mysqli_query()返回false,您需要使用mysqli_error($MYSQL_CONNECT)来检查出现了什么问题,set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS on) 会将错误作为字符串返回。

对于SQL注入问题,您应该做的是将值视为值(查询参数)而不是可执行代码(通过将它们直接连接到查询中)。 This is a great place to learn more about that.请注意,SQL注入不仅仅是一个安全问题,而且也是错误和错误的常见来源。由于您目前确实遇到了这个问题,因此值得纠正。

答案 1 :(得分:-1)

你应该用单引号包装你的变量,试试:

$query = mysqli_query($MYSQL_CONNECT, "UPDATE forum_topics SET player_userid = '".$player_userid."', titulo = '".$titulo."', msg = '".$msg."', data = '".$data."' WHERE UserID='".$inTopic."'");