PHP使用PDO绑定的mysql查询中的数组

时间:2015-01-13 11:43:27

标签: php mysql pdo

我已经看过其他堆栈溢出答案,但除了错误代码之外,我没有看到任何与我的问题相似的内容。

我正在尝试在我的查询中使用数组但是我不确定为什么使用:start和:offset绑定它无法运行。

$location = array("England", "America", "Australia"); 

$qMarks = str_repeat('?,', count($location) - 1) . '?';

//Query
$sql=$conn->prepare("SELECT * FROM adverts WHERE location IN ($qMarks) AND status = 2 LIMIT :limit OFFSET :start");
$sql->bindValue(':limit', (int) $limit, PDO::PARAM_INT);
$sql->bindValue(':start', (int) $start, PDO::PARAM_INT);
$sql->execute($location);
$adverts=$sql->fetchAll();

我不确定为什么限制和偏移绑定存在它不运行,是否与你无法组合位置占位符。

更新1 -

如果我删除数组和qMark并将执行更改为sql->execute();

然后绑定运行

1 个答案:

答案 0 :(得分:1)

您不能在一个预准备语句中混合使用?绑定和:param绑定。

所以,你需要这样的东西:

$location = array("England", "America", "Australia");

$qMarks = str_repeat('?,', count($location) - 1) . '?'; 

$location[] = (int)$limit;
$location[] = (int)$offset;
$sql = $conn->prepare("SELECT * FROM adverts WHERE location IN ($qMarks) AND status = 2 LIMIT ? OFFSET ?");
$sql->execute($location);