我有这个:
$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,但它也不起作用...
最佳答案
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();
关于php - 带问号的 PDO 准备不适用于数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16498640/