php - 带问号的 PDO 准备不适用于数字

标签 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));

但是,当我将 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/

相关文章:

php - 当用户注册游戏项目时创建新的数据库表

javascript - 通过 url 以安全的方式共享页面?

php - pdo 仅使用查询从符合模式的表中获取列名

php - 我可以将数组绑定(bind)到 PDO 查询中的 IN() 条件吗?

php - PDO:prepare() 是否会转义所有数据,即使未绑定(bind)?

基于 PHP 的应用程序/Web 登录框架?

PHP SQL 查询 - 无法添加 HTML 格式

sql - 如何检索到CEO为止的所有监事?

mysql - 有没有办法重写此查询以作为 SQL View 工作

mysql - 内连接错误: #1054 - Unknown column 'users.address_id' in 'on clause'