gpt4 book ai didi

php - where 子句中的未知列,但我已经验证

转载 作者:太空宇宙 更新时间:2023-11-03 12:32:05 26 4
gpt4 key购买 nike

我正在为这行简单的 SQL 而苦苦挣扎......

运行它一直给我错误:Error: Unknown column 'comics' in 'where clause'

这通常是一个简单的修复...只需检查以确保“comics”作为一个条目存在于“table_name”列中。但是我已经检查过了...

enter image description here

我没有发现我的 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 注入(inject)进行了适当的过滤。我会注意到,由于更新包括 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...
}

问题更新和评论后编辑:

Call to undefined method mysqli_result::num_rows()

错误消息暗示您试图访问 MySQLi 结果属性 num_rows 作为 方法调用 使用 () 而不是属性.你应该使用:

$result->num_rows

...而不是

$result->num_rows()

关于php - where 子句中的未知列,但我已经验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14924356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com