首先是一组现代的非 WordPress 技术,使用 mysqli 准备好的语句,数组中的值数量未知。第二个片段将是 WordPress 的等价物。
让我们假设输入数据的索引数组是不受信任的并且可以从$_GET['villes']
. 准备好的语句是现代标准,专业开发人员更喜欢旧的/不受信任的转义技术。接下来的代码片段将返回具有ville
数组中指定值之一的行。如果数组未声明或为空,它将返回数据库表中的所有行。
原生 PHP 技术:
$sql = "SELECT DISTINCT telecopie FROM comptage_fax";
if (!empty($_GET['villes'])) {
$count = count($_GET['villes']);
$commaDelimitedPlaceholders = implode(',', array_fill(0, $count, '?'));
$stmt = $conn->prepare("$sql WHERE ville IN ($commaDelimitedPlaceholders)");
$stmt->bind_param(str_repeat('s', $count), ...$_GET['villes']);
$stmt->execute();
$result = $stmt->get_result();
} else {
$result = $conn->query($sql);
}
从这一点开始,您可以访问不同telecopie
值的行(从技术上讲,这是一个可迭代的结果集对象),就像使用简单的foreach()
.
foreach ($result as $row) {
echo $row['telecopie'];
}
使用 WordPress 的辅助方法,语法更简单,因为变量绑定和查询执行由以下人员处理get_results()
:
$sql = "SELECT DISTINCT telecopie FROM comptage_fax";
if (!empty($_GET['ville']) {
$commaDelimitedPlaceholders = implode(',', array_fill(0, count($_GET['ville']), '%s'));
$sql = $wpdb->prepare("$sql WHERE ville IN ($commaDelimitedPlaceholders)", $_GET['ville']);
}
$result = $wpdb->get_results($sql, ARRAY_A);
从这一点来看,$result
是关联数组的索引数组——特别是因为ARRAY_A
. $result
不是第一个原生 php 片段中的结果集对象。这意味着您可以array_
在数据上使用经典的循环语言构造函数或完整的函数。
有用的参考资料: