我试图将此代码放入我的页面
<?php
include'../../includes/config.php';
mysqli_query($con, 'UPDATE action SET watch = watch+1 WHERE title = $title ');
?>
我收到这个错误
可捕获的致命错误:类mysqli的对象无法在中转换为字符串
问题出在$con
变量上,因为当我删除它时,问题就解决了。
请帮帮我,原谅我拼写错误,因为我是阿拉伯人。
我不确定你是否解决了这个问题,但我会提交以下答案以防万一。
由于以下原因,此查询失败。
mysqli_query($con, 'UPDATE action SET watch = watch+1 WHERE title = $title ');
^^^^^^ ^^^^^^
首先,您使用一个MySQL保留字"action",然后$title
表示为字符串。
您需要用记号将"action"列名包装起来,用引号将$title
包装起来,如果数据中包含MySQL会抱怨的任何内容,例如撇号,则可能会转义该数据。
即:
$title = mysqli_real_escape_string($con, $title);
mysqli_query($con, "UPDATE `action` SET watch = watch+1 WHERE title = '$title' ");
然后在评论中添加了$con=mysqli_connect("host","db","pass");
语法为:
- 主机
- 用户名
- 密码(如果需要)
- 数据库
参考文献:
- http://php.net/manual/en/function.mysqli-connect.php
- http://php.net/manual/en/mysqli.construct.php
程序风格示例,来自手册:
<?php
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
if (!$link) {
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
echo 'Success... ' . mysqli_get_host_info($link) . "'n";
mysqli_close($link);
?>
将or die(mysqli_error($con))
添加到mysqli_query()
。
将错误报告添加到文件顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告只能在临时阶段进行,而不能在生产阶段进行。
如果要检查查询是否真的成功,请使用affected_rows()
。
- http://php.net/manual/en/mysqli.affected-rows.php
但是,您当前的代码对SQL注入是开放的。使用准备好的语句,或将PDO与准备好的声明一起使用、它们更安全。
脚注:
- 不确定
$title
变量的定义在哪里/如何定义,但看到这样的单词,告诉我它很可能是一个字符串,您可能需要详细说明