PDO不能使用预处理的两处地方
有些童鞋使用预处理方式取数据库信息时发现结果是空,但数据库的确存在信息。这个是新手经常忽略的一个地方,甚至可能调试半天都不知道问题出在哪里?
第一、MySQL中的LIMIT关键字不能使用预处理
错误的:以下语句在LIMIT中使用了':start',':num'预处理绑定参数方式导致取不出数据,但不会报错。
|
1
2
3
4
5
6
7
8
9
10
11
|
<?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语句,结果正常
|
1
2
3
4
5
6
7
8
9
10
11
|
<?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'预处理绑定参数方式导致取不出数据,同样也不会报错
|
1
2
3
4
5
6
7
8
9
10
|
<?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关键字语句,结果能取出数据
|
1
2
3
4
5
6
7
8
9
10
|
<?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); ?> |
浙公网安备 33010602011771号