在 Drupal 8 的查询中热使用变量?

Hot to use variable in query in Drupal 8?

我有这个代码:

function my_module_test($key_make = '') {
  $db = new mysqli('xxx', 'xxx', 'xxx', "xxx");
  mysqli_set_charset($db, "UTF8");
  if ($key_make) {
    $sql_model = "SELECT * FROM `car_model` WHERE `id_car_make` = ('$key_make')";
    $res_model = $db->query($sql_model) or die(mysqli_error($db));
    while ($row = mysqli_fetch_object($res_model)) {
      $Key_model = $row->id_car_model;
      $Model_value = $row->name;

      $dropdown_model[$Key_model] = $Model_value;
    }
  }
  return $dropdown_model;
}

如何在 WHERE clausole 中传递变量 $key_make 的值?

查询函数采用第二个参数和替换值数组,因此您可以这样做:

$sql_model = "SELECT * FROM {car_model} WHERE id_car_make = :make";
$res_model = $db->query($sql_model, [':make' => $key_make]);

静态查询是documented here

您也可以使用动态查询 (documented here):

$query = $db->select('car_model', 'cm');
$query->fields('cm');
$query->condition('cm.id_car_make', $key_make);
$res_model = $query->execute();

但是...
如果您的 "car_model" 是自定义实体(它们应该是自定义实体,因为您将获得许多好处,例如视图集成),您可能应该使用 entityQuery

首先您需要使用 Drupal 数据库 API 连接到数据库。所以我的最终代码如下并且有效。

function car2db_model_dropdown_options($key_make) {
  $connection = Database::getConnection('default', 'migrate');
  $dropdown_model = ['_none'=>'Select'];
  $key_make = (int)$key_make;

  $sql_model = "SELECT * FROM car_model WHERE id_car_make = :make";
  $query = $connection->query($sql_model, [':make' => $key_make]);
  $result = $query->fetchAll();

  foreach ($result as $row) {
    $Key_model = $row->id_car_model;
    $Model_value = $row->name;

    $dropdown_model[$Key_model] = $Model_value;
  }
  return $dropdown_model;
}