有些童鞋使用预处理方式取数据库信息时发现结果是空,但数据库的确存在信息。这个是新手经常忽略的一个地方,甚至可能调试半天都不知道问题出在哪里?
MySQL中的LIMIT关键字不能使用预处理
错误的: 以下语句在LIMIT中使用了:start
,:num
预处理绑定参数方式导致取不出数据,但不会报错
<?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);
?>