0

我从代码中的变量 $query 中得到错误:“'where 子句'中的未知列 'Array'”。

这是我的代码:

$zzz = mysql_query("SELECT alias FROM table WHERE ColumnA = 'yes'");
while($aaa = mysql_fetch_array($zzz)){
    $array[] = $aaa['alias'];
}
$query = mysql_query("SELECT * FROM table2 WHERE alias NOT IN ($array) ORDER BY Column1 DESC, Column2 DESC");

我想在 table2 中进行 SELECT 查询 WHERE 'alias' 不等于 $array 中来自提取数组 $aaa 的任何数据。

我得到了一个线索,可以从 fetch 数组中创建一个数组: SQL Query 中的数组?

但是,我不知道如何为由 $aaa 制作的数组中的每个数据添加“报价”。

谁能告诉我该怎么做?:)

4

2 回答 2

2

为什么不使用嵌套查询?例子:

$query = mysql_query("SELECT * FROM table2 WHERE alias NOT IN (SELECT alias FROM table WHERE ColumnA = 'yes') ORDER BY Column1 DESC, Column2 DESC");

但是,正如我在下面的评论中所指出的,您的交互似乎容易受到注入攻击。正如其他人所说,这可以在某种程度上避免,但正如我也说过的,更好的方法之一是使用 PDO。例子:

try {
    $dbh = new PDO("mysql:host=localhost;dbname=dbname", "user", "password");
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $dbh->prepare("SELECT * FROM table2 WHERE alias NOT IN (SELECT alias FROM table WHERE ColumnA = :bool) ORDER BY Column1 DESC, Column2 DESC");
    $stmt->bindValue(":bool","yes");
    $stmt->execute();
} catch (\PDOException $e) {
    // Something went wrong
}

while ($row = $stmt->fetch()) {
    // do stuff with query
}

PDO 附带 php 5.1。

于 2013-03-02T09:04:33.833 回答
0

您正在尝试$array直接使用,它不会按照您需要的方式自行打印。按照链接问题中的建议,您可以使用implode

$newarray = implode(", ", $array);
$query = mysql_query("SELECT * FROM table2 WHERE alias NOT IN ($newarray) ORDER BY Column1 DESC, Column2 DESC");

至于添加引号,您可以将它们连接在一起。但是,我也会在引用之前转义这些值,以避免SQL 注入漏洞:

while($aaa = mysql_fetch_array($ambilLarikAkunTerlindungi)){
    $array[] = "'" . mysqli_real_escape_string($aaa['alias']) . "'";
}
于 2013-03-02T09:02:27.177 回答