html 表格和 PDO 函数与数组
html form and PDO function with array
我在 HTML 的复选框中有一些选择,我需要通过数组传递这些选择:
<div>
<input type="checkbox" name="language[]" id="anglais" value="anglais" /> Anglais
<input type="checkbox" name="language[]" id="allemand" value="allemand" /> Allemand
<input type="checkbox" name="language[]" id="espagnol" value="espagnol" /> Espagnol
<input type="checkbox" name="language[]" id="francais" value="francais" /> Francais
<input type="checkbox" name="language[]" id="italien" value="italien" /> Italien
<input type="checkbox" name="language[]" id="russe" value="russe" /> Russe
<input type="checkbox" name="language[]" id="chinois" value="chinois" /> Chinois
<br/>
<input type="submit" value="Actualiser !">
</div>
然后,这个数组被发送到以下 PDO 查询:
function retrieve_events_by_type ($DB, $type, $language, $date) {
$sql = "SELECT organizer, eventname, eventplace, language, eventdate, eventhour, eventminutes FROM events where eventtype = :type";
if (!empty($language)) {
$place_holders = implode(',', array_fill(0, count($language), '?'));
$sql .= " AND language IN ($place_holders)";
}
$sql .= empty($date) ? "" : " AND eventdate = :date ";
$req = $DB->prepare($sql);
$req -> bindParam(':type', $type, PDO::PARAM_STR);
if (!empty($language)) {
$req -> bindParam(':language', $language, PDO::PARAM_STR);
}
if (!empty($date)) {
$req -> bindParam(':date', $date, PDO::PARAM_STR);
}
$req -> execute();
$events = $req->fetchAll(PDO::FETCH_ASSOC);
$req->closeCursor();
return ($events);
}
我尝试使用 PDO::execute 或 PDO::PARAM_STR 将数组传递给 PDO,但它不起作用..
是否可以将命名参数和占位符传递给 PDO?
有没有办法在 'IN' sql 子句中传递多个字符串?
一个问题是,您将占位符 ?
插入到 SQL 查询中,然后绑定到命名参数 :language
。 PDO是如何将两者联系起来的呢? 命名参数在你有一个固定的已知变量列表时工作,但当你有一个值数组时,占位符更简单。
在这里,对所有变量使用 PHP PDO 占位符 ?
,而不是命名参数,然后将所有值的数组传递给 PDO execute
方法。
function retrieve_events_by_type ($DB, $type, $language, $date) {
$sql = 'SELECT organizer, eventname, eventplace, language, eventdate, eventhour, eventminutes FROM events where eventtype = ?';
$exec_array = array($type);
if (!empty($language)) {
//$place_holders = str_repeat('?,', count($language) - 1) . '?'; // alternate
$place_holders = implode(',', array_fill(0, count($language), '?'));
$sql .= " AND language IN ($place_holders)";
$exec_array = array_merge($exec_array, $language);
}
if (!empty($date)) {
$sql .= ' AND eventdate = ?';
$exec_array = array_merge($exec_array, array($date));
}
$req = $DB->prepare($sql);
$req -> execute($exec_array);
$events = $req->fetchAll(PDO::FETCH_ASSOC);
$req->closeCursor();
return ($events);
}
我在 HTML 的复选框中有一些选择,我需要通过数组传递这些选择:
<div>
<input type="checkbox" name="language[]" id="anglais" value="anglais" /> Anglais
<input type="checkbox" name="language[]" id="allemand" value="allemand" /> Allemand
<input type="checkbox" name="language[]" id="espagnol" value="espagnol" /> Espagnol
<input type="checkbox" name="language[]" id="francais" value="francais" /> Francais
<input type="checkbox" name="language[]" id="italien" value="italien" /> Italien
<input type="checkbox" name="language[]" id="russe" value="russe" /> Russe
<input type="checkbox" name="language[]" id="chinois" value="chinois" /> Chinois
<br/>
<input type="submit" value="Actualiser !">
</div>
然后,这个数组被发送到以下 PDO 查询:
function retrieve_events_by_type ($DB, $type, $language, $date) {
$sql = "SELECT organizer, eventname, eventplace, language, eventdate, eventhour, eventminutes FROM events where eventtype = :type";
if (!empty($language)) {
$place_holders = implode(',', array_fill(0, count($language), '?'));
$sql .= " AND language IN ($place_holders)";
}
$sql .= empty($date) ? "" : " AND eventdate = :date ";
$req = $DB->prepare($sql);
$req -> bindParam(':type', $type, PDO::PARAM_STR);
if (!empty($language)) {
$req -> bindParam(':language', $language, PDO::PARAM_STR);
}
if (!empty($date)) {
$req -> bindParam(':date', $date, PDO::PARAM_STR);
}
$req -> execute();
$events = $req->fetchAll(PDO::FETCH_ASSOC);
$req->closeCursor();
return ($events);
}
我尝试使用 PDO::execute 或 PDO::PARAM_STR 将数组传递给 PDO,但它不起作用..
是否可以将命名参数和占位符传递给 PDO?
有没有办法在 'IN' sql 子句中传递多个字符串?
一个问题是,您将占位符 ?
插入到 SQL 查询中,然后绑定到命名参数 :language
。 PDO是如何将两者联系起来的呢? 命名参数在你有一个固定的已知变量列表时工作,但当你有一个值数组时,占位符更简单。
在这里,对所有变量使用 PHP PDO 占位符 ?
,而不是命名参数,然后将所有值的数组传递给 PDO execute
方法。
function retrieve_events_by_type ($DB, $type, $language, $date) {
$sql = 'SELECT organizer, eventname, eventplace, language, eventdate, eventhour, eventminutes FROM events where eventtype = ?';
$exec_array = array($type);
if (!empty($language)) {
//$place_holders = str_repeat('?,', count($language) - 1) . '?'; // alternate
$place_holders = implode(',', array_fill(0, count($language), '?'));
$sql .= " AND language IN ($place_holders)";
$exec_array = array_merge($exec_array, $language);
}
if (!empty($date)) {
$sql .= ' AND eventdate = ?';
$exec_array = array_merge($exec_array, array($date));
}
$req = $DB->prepare($sql);
$req -> execute($exec_array);
$events = $req->fetchAll(PDO::FETCH_ASSOC);
$req->closeCursor();
return ($events);
}