【问题标题】:Hot to use variable in query in Drupal 8?在 Drupal 8 的查询中使用变量很热门?
【发布时间】:2020-03-11 20:57:22
【问题描述】:

我有这个代码:

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


    【解决方案1】:

    查询函数接受带有替换值数组的第二个参数,所以你可以这样做:

    $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

    【讨论】:

      【解决方案2】:

      首先,您需要使用 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;
      }
      

      【讨论】:

      • 有点跑题了,但是你从哪里得到汽车品牌和型号的列表?我需要一份即将进行的项目的清单。
      • 至 car2db.com。我设法创建了动态下拉列表,但是当我保存它时返回错误:“检测到非法选择....”
      • 您何时/在何处运行代码来设置下拉选项?您需要在构建表单时设置它们,否则您将收到您所看到的错误。这是 drupal 表单的一项安全功能,可阻止人们发送他们想要的任何选项值。
      • 我在这里问过问题:[link]stackoverflow.com/questions/60662918/… with code
      • 如果确实回答了这个问题,请在此处接受答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多