PDO不能使用预处理的两处地方

有些童鞋使用预处理方式取数据库信息时发现结果是空,但数据库的确存在信息。这个是新手经常忽略的一个地方,甚至可能调试半天都不知道问题出在哪里?

MySQL中的LIMIT关键字不能使用预处理

错误的: 以下语句在LIMIT中使用了:start:num预处理绑定参数方式导致取不出数据,但不会报错

【国内直连ChatGPT 29元起】
国内直连ChatGPT,Plus会员每月29元起,支持最新o1模型探索更多领域,无需注册OpenAI账号。

<?php
// 琼台博客 www.qttc.net
$pdo = new PDO('mysql:host=localhost;dbname=test',root,root);
$start = 20;
$num = 10;
$sql = 'SELECT * FROM tab LIMIT :start,:num';
$stmt = $pdo->prepare($sql);
$param = array(':start'=>$start,':num'=>$num);
$stmt->execute($param);
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($data); 
?>

正确的: 直接拼出LIMIT语句,结果正常

<?php
// 琼台博客 www.qttc.net
$pdo = new PDO('mysql:host=localhost;dbname=test',root,root);
$start = 20;
$num = 10;
$sql = 'SELECT * FROM tab LIMIT '.$start.','.$num;
$stmt = $pdo->prepare($sql);
//$param = array(':start'=>20,':num'=>10);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($data); 
?>

SQLServer中TOP关键字不能使用预处理

错误的: 在TOP关键字中使用了:top预处理绑定参数方式导致取不出数据,同样也不会报错

<?php
$pdo = new PDO('mssql:host=localhost;dbname=test',root,root);
$top = 10;
$sql = 'SELECT TOP :top * FROM tab';
$stmt = $pdo->prepare($sql);
$param = array(':top'=>$top);
$stmt->execute($param);
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($data); 
?>

正确的: 直接拼出TOP关键字语句,结果能取出数据

<?php
$pdo = new PDO('mssql:host=localhost;dbname=test',root,root);
$top = 10;
$sql = 'SELECT TOP '.$top.' * FROM tab';
$stmt = $pdo->prepare($sql);
//$param = array(':top'=>$top);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($data); 
?>
分享

TITLE: PDO不能使用预处理的两处地方

LINK: https://www.qttc.net/104-php-pdo-pretreatment-can-not-use-in-somewhere.html

NOTE: 原创内容,转载请注明出自琼台博客