请问老师这段代码问题在哪里

请问老师这段代码问题在哪里

<?php

$dsn = "mysql:host=localhost;port=3306;dbname=test";
$dbName = "root";
$dbPWD = "root";
$pdo = new PDO($dsn, $dbName, $dbPWD);
$pdo->exec("SET NAMES utf8");


$sql = "SELECT id,imgfile,info,width,height FROM images";

$sql .= " ORDER BY id DESC LIMIT :start,:length";

$stmt = $pdo->prepare($sql);

$stmt->bindValue(":start",0);
$stmt->bindValue(":length",9);
$stmt->execute();

$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($data);

查询出来是空数组

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

您好,抱歉是可以绑定的。但是需要指定bindvalue的第三个参数:

$stmt->bindValue(":start",0,PDO::PARAM_INT);
$stmt->bindValue(":length",9,PDO::PARAM_INT);

第三个参数为:使用 PDO::PARAM_* 常量明确地指定参数的类型。

祝学习愉快!

  • 雨之赞歌 提问者 #1
    为什么啊,不理解
    2019-05-07 18:57:28
  • 雨之赞歌 提问者 #2
    什么情况下必须要指定参数类型?
    2019-05-07 19:02:44
  • 好帮手慕查理 回复 提问者 雨之赞歌 #3
    您好,没有设置参数类型时,参数类型默认为字符串,而limit参数是数字,所以造成查询失败,也是为甚么需要设置参数类型的原因。祝学习愉快!
    2019-05-07 19:06:38
好帮手慕查理 2019-05-07 18:02:38

您好,测试在limit后面是不能绑定的,虽然没有报错,但不能查询出信息。祝学习愉快!

  • 提问者 雨之赞歌 #1
    有limit就不能绑定?? 为什么呐?
    2019-05-07 18:03:21
  • 提问者 雨之赞歌 #2
    之前在分页课程的时候 老师是可以用的啊
    2019-05-07 18:04:56
提问者 雨之赞歌 2019-05-07 17:56:26
<?php

try {

    $dsn = "mysql:host=localhost;prot=3306;dbname=test";
    $dbName = "root";
    $dbPWD = "root";
    $pdo = new PDO($dsn, $dbName, $dbPWD, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
    $pdo->exec("SET NAMES utf8");

    $sql = "SELECT id,imgfile,info,width,height FROM images ORDER BY id DESC LIMIT 0,9";
    $stmt = $pdo->prepare($sql);
//    $stmt->bindValue(":start", 0);
//    $stmt->bindValue(":length", 9);
    $stmt->execute();
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

    print_r($data);
    exit;

} catch (Exception $e) {
    echo $e->getMessage();
}

为什么绑定参数就报错啊?

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师