我在用这行简单的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
有人可以帮忙吗?
谢谢!
最佳答案
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()
关于php - where子句中的未知列,但是我已经验证了,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14924356/