有些童鞋 使用 预处理方式取数据库信息时发现结果是空,但数据库的确存在信息。这个是新手经常忽略的一个地方,甚至可能调试半天都不知道问题出在哪里?
第一、MySQL中的LIMIT关键字不能使用预处理
错误的:以下语句在LIMIT中使用了':start',':num'预处理绑定参数方式导致取不出数据,但不会报错。
<?php $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 $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); ?>第二、MSSQL中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); ?>声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did8193