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

问题描述 投票:0回答:2

我有此代码:

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的值?

drupal-8
2个回答
0
投票

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

$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


0
投票

首先,您需要使用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;
}
© www.soinside.com 2019 - 2024. All rights reserved.