Php PDO用问号进行准备,不';我不喜欢数字

Php PDO用问号进行准备,不';我不喜欢数字,php,sql,pdo,sql-like,Php,Sql,Pdo,Sql Like,我有这个: $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)); 但是

我有这个:

$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 0、10替换LIMIT并从它工作的数组中删除$min和$max时,它不工作(不返回任何内容)。
我做错了什么?我尝试使用“0”而不是“0”,但它也不起作用…

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

值的数组,其元素数与绑定参数数相同 在正在执行的SQL语句中。所有值都被视为 PDO::PARAM_STR


因此,您应该使用
bindValue
而不是execute快捷方式。

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();

它很有效,谢谢你的帮助!你说得对,谢谢!