更新mysqli_query中可捕获的致命错误问题

时间:2015-06-30 23:42:05

标签: php mysqli

我尝试将此代码放入我的页面

<?php
 include'../../includes/config.php';
mysqli_query($con, 'UPDATE action SET watch = watch+1 WHERE title = $title ');
?>

我收到此错误

  

捕获致命错误:类mysqli的对象无法转换为

中的字符串

问题在于$con变量,因为当我删除它时,问题就完成了。

请帮助我并原谅我的拼写,因为我是阿拉伯语。

1 个答案:

答案 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 statementsPDO with prepared statements它们更安全

脚注:

  • 不确定$title变量在何处/如何定义,但看到一个单词,告诉我它很可能是一个字符串,你可能需要详细说明。