我在用这行简单的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/

10-13 08:57