我尝试将此代码放入我的页面
<?php
include'../../includes/config.php';
mysqli_query($con, 'UPDATE action SET watch = watch+1 WHERE title = $title ');
?>
我收到此错误
捕获致命错误:类mysqli的对象无法转换为
中的字符串
问题在于$con
变量,因为当我删除它时,问题就完成了。
请帮助我并原谅我的拼写,因为我是阿拉伯语。
答案 0 :(得分:2)
我不确定你是否解决了这个问题,但我提交以下答案以防万一。
此查询失败有几个原因。
mysqli_query($con, 'UPDATE action SET watch = watch+1 WHERE title = $title ');
^^^^^^ ^^^^^^
首先,您使用的是MySQL reserved word名为“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");
语法为:
参考文献:
程序样式示例,来自手册:
<?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()
。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告应仅在暂存时完成,而不是生产。
如果您想检查您的查询是否真的成功,请使用affected_rows()
。
但是,您目前的代码向SQL injection开放。使用prepared statements或PDO with prepared statements,它们更安全。
脚注:
$title
变量在何处/如何定义,但看到一个单词,告诉我它很可能是一个字符串,你可能需要详细说明。