我有此代码:
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;
}