【问题标题】:PHP Add quote to array from fetch arrayPHP从获取数组中添加引用到数组
【发布时间】:2013-02-16 20:01:12
【问题描述】:

我收到错误:“'where 子句'中的未知列'数组'”来自我的代码中的变量 $query。

这是我的代码:

$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 数组中创建一个数组: Array in SQL Query?

但是,我不知道如何为由 $aaa 生成的数组中的每个数据添加“引号”。

谁能告诉我怎么做? :)

【问题讨论】:

    标签: php arrays fetch


    【解决方案1】:

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

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

    至于添加引号,您可以将它们连接在一起。但是,我还要escape 引用之前的值,以避免SQL injection 漏洞:

    while($aaa = mysql_fetch_array($ambilLarikAkunTerlindungi)){
        $array[] = "'" . mysqli_real_escape_string($aaa['alias']) . "'";
    }
    

    【讨论】:

      【解决方案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 提供。

      【讨论】:

      • 但是,请注意,您当前的数据库交互方法似乎容易受到注入攻击。我建议你查一下 PDO。
      • 不要将 PDO 代码包装到 try..catch 中。这只是无用和错误的
      • @YourCommonSense 你能解释一下吗?甚至 php 站点也建议使用此方法来捕获错误..
      • @YourCommonSense 我已经删除了有问题的代码,您能否删除您的反对票?
      • @WouterJ 我删除了 try-catch 显然是“这是错误的”。我以前有它,但我被否决了。
      猜你喜欢
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2017-12-05
      • 2014-10-31
      • 2013-02-24
      • 1970-01-01
      相关资源
      最近更新 更多