我正在努力解决这个简单的SQL行......
运行它会一直给我错误:Error: Unknown column 'comics' in 'where clause'
。
这通常是一个简单的修复...只需检查以确保“漫画”作为“table_name”列中的条目存在。但我已经检查了......
我的SQL没有看错:
$sql = "SELECT ip FROM votes WHERE ip = '".$_SERVER['REMOTE_ADDR']."' AND table_name = $table AND imgid = $imgid";
编辑:
是的,我已经用引号尝试了它: $sql = "SELECT ip FROM votes WHERE ip = '".$_SERVER['REMOTE_ADDR']."' AND table_name = '$table' AND imgid = $imgid";
但是这会引发错误:
Fatal error: Call to undefined method mysqli_result::num_rows() in C:\wamp\www\HTwS\scripts\likecounter.php on line 40
有人可以帮忙吗?
谢谢!
答案 0 :(得分:3)
table_name
的值是一个字符串,因此必须在查询中单引号。如果没有将其作为字符串值引用,MySQL会假定提供的不带引号的$table
是列标识符。
$sql = "SELECT ip FROM votes WHERE ip = '".$_SERVER['REMOTE_ADDR']."' AND table_name = '$table' AND imgid = $imgid";
//------------------------------------------------------------------------------------^^^^^^^^^
如果$imgid
也是非数字值,您也需要引用该值。
我们假设它已经针对SQL注入进行了正确过滤,如果它是用户输入的结果。我会注意到,由于更新包含特定于MySQLi的代码,所以你真的应该这样做as a prepared statement而不是对mysqli::query()
的构造字符串调用。
// Recommended to do this with a prepared statement.
$stmt = $mysqli->prepare("SELECT ip FROM votes WHERE ip = ? AND table_name = ? AND imgid = ?");
if ($stmt) {
$stmt->bind_param('ssi', $_SERVER['REMOTE_ADDR'], $table, $imgid);
$stmt->execute();
// Bind results, fetch, etc...
}
调用未定义的方法mysqli_result :: num_rows()
错误消息表示您尝试使用num_rows
而不是属性访问MySQLi结果属性()
作为方法调用。你应该使用:
$result->num_rows
...而不是
$result->num_rows()