【问题标题】:Arrays in Drupal static queriesDrupal 静态查询中的数组
【发布时间】:2020-01-28 19:00:14
【问题描述】:

我有一个查询,我想在其中将 MS SQL 语句的结果传递给一个变量。不知道该怎么做。

我的查询:

 if($view->id() == 'program_search'  && 
  !empty($searched_miles_value) &&
  !empty($searched_zip_value) &&
  ($searched_miles_value != 'any')) {

    $connection = \Drupal\Core\Database\Database::getConnection();
    $result = $connection->query("SELECT to_zip FROM zipmaster_xref WHERE from_zip = '".$searched_zip_value."' AND miles = '".$searched_miles_value."'")-> fetchAll();

    $target_zips = $result ; //this line is not working
    foreach($result as $zip) {
      $target_zips[] = $zip->to_zip;
    }

    $query->addWhere('new_group', 'node__field_zip.field_zip_value', $target_zips, 'IN');

我想将 $result 数组传递给 $target_zips 并循环遍历它。谁能帮我解决这个问题?

谢谢!

【问题讨论】:

  • return $result->fetchAll 在某处返回值,之后的代码没有执行。
  • 是的...有什么办法可以解决这个问题吗?最初我没有那条线。我所拥有的只是在上一个查询行的末尾进行简单的获取。这也不起作用!
  • 如果您阅读文档会更好:php.net/manual/en/pdostatement.fetchall.php
  • 谢谢。 FetchAll 不会产生任何问题。我的问题是在那之后的线路。不确定如何将 $result 传递给 target_zips 字段。
  • 你为什么要设置$target_zips = $result ;,然后再循环$result设置$target_zips?你不会在循环之前将 $target_zips 设置为一个空数组吗?

标签: php drupal drupal-8 drupal-modules


【解决方案1】:

在获取数据之前,您必须执行查询,例如:

$result = $connection->query("SELECT to_zip FROM zipmaster_xref WHERE from_zip = '".$searched_zip_value."' AND miles = '".$searched_miles_value."'")->execute()->fetchAll();

但是这种用法根本不正确。将变量传递给直接导致 SQL 注入的查询是为了避免这种情况,您应该使用占位符先阅读文档。 占位符示例:

$query = $database->query("SELECT id, example FROM {mytable} WHERE created > :created", [
  ':created' => REQUEST_TIME - 3600,
]);

Drupal 8 静态查询文档位于:https://www.drupal.org/docs/8/api/database-api/static-queries

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2013-08-18
    • 2021-06-26
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多