我有这个:
$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,但它也不起作用......
答案 0 :(得分:1)
我的猜测是数字被绑定为字符串。从手册:
具有与绑定参数一样多的元素的值数组 在正在执行的SQL语句中。所有值均视为 PDO :: PARAM_STR。
因此,您应该使用bindValue
而不是执行快捷方式。
答案 1 :(得分:1)
PDO :: execute将所有参数转义为STRING。
$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();