1

我有这个 :

$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'user', 'pass');

$max = 10;
$min = 0;
$q = $_GET['q'];

$result = $pdo->prepare("SELECT * FROM fruits WHERE name LIKE ? LIMIT ?, ?");
$result->execute(array('%'.$q.'%', $min, $max));

但是,当我将 LIMIT 替换为 LIMIT 0、10 并从它工作的数组中删除 $min 和 $max 时,它不起作用(不返回任何内容)。我究竟做错了什么?我尝试使用'0'而不是0,但它也不起作用......

4

2 回答 2

1

我的猜测是这些数字被绑定为字符串。从手册:

一个包含与正在执行的 SQL 语句中的绑定参数一样多的元素的值数组。所有值都被视为 PDO::PARAM_STR。

所以你应该使用bindValue而不是执行快捷方式。

于 2013-05-11T15:38:03.033 回答
1

PDO::execute 将所有参数转义为字符串。

$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'user', 'pass');

$max = 10;
$min = 0;
$q = (isset($_GET['q']) && is_string($_GET['q'])) ? $_GET['q'] : '';

$stmt = $pdo->prepare('SELECT * FROM fruits WHERE name LIKE ? LIMIT ?, ?');
$stmt->bindValue(1, "%{$q}%", PDO::PARAM_STR);
$stmt->bindValue(2, $min    , PDO::PARAM_INT);
$stmt->bindValue(3, $max    , PDO::PARAM_INT);
$stmt->execute();
于 2013-05-11T15:41:28.207 回答