【发布时间】:2022-10-01 23:59:51
【问题描述】:
$optional_column = \"\"; // define empty variable
$sql = \"SELECT id {$optional_column} FROM table;\";
if (true) {
$optional_column = \", name\";
}
echo $sql;
输出:从表中选择 id;
期望的输出:SELECT id, name FROM table;
在最初将 $sql 字符串定义为空之后,如何更改 {$optional_column} 的值?重新定义后返回空。
这是我正在使用的完整 php 文件:
$metadata_columns = [
\'make\' => \'camera_brand\',
\'model\' => \'camera_model\',
\'lens\' => \'lens\',
\'aperture\' => \'aperture\',
\'iso\' => \'iso\',
\'shutterspeed\' => \'shutter_speed\',
\'photo-date\' => \'photo_date\',
\'upload-date\' => \'upload_date\'
];
$group_column = \'\';
$sql = \"SELECT objects.id, objects.object_key, objects.object_name, objects.starred {$group_column} FROM objects\";
$conditions = [];
$parameters = [];
if (isset($_POST[\'search_params\']) && !empty($_POST[\'search_params\'])) {
$search_params = $_POST[\'search_params\'];
for ($i=0; $i<count($search_params); $i++) {
$kp = explode(\':\', $search_params[$i]);
$column = $metadata_columns[$kp[0]];
$value = $kp[1];
$conditions[] = $column.\' = ?\';
$parameters[] = $value;
}
}
$where_clause = \' WHERE trash IS NULL\';
if (!empty($conditions)) {
$sql .= \' INNER JOIN object_metadata ON object.id = object_metadata.id\';
$where_clause .= \" AND (\".implode(\" OR \", $conditions). \')\';
}
$sql .= $where_clause;
if (isset($_POST[\'group_by\']) && !empty($_POST[\'group_by\'])) {
$group_column = $metadata_columns[$_POST[\'group_by\']];
$sql .= \' GROUP BY \'.$group_column;
}
if (isset($_POST[\'sort_by\']) && !empty($_POST[\'sort_by\'])) {
$sort_column = $metadata_columns[$_POST[\'sort_by\']];
$sql .= \' ORDER BY \' .$sort_column;
}
echo $sql;
标签: php