PHP execute()返回false,bindParam()的使用

问题描述

PDO::prepare — 准备要执行的语句,带有变量(表名、以及参数变量);
使用 bindParam() 分别绑定前面提到的变量,execute 执行预处理语句返回 false

代码部分:

	$conn = new PDO($dsn, $user, $pass,array(PDO::ATTR_PERSISTENT=>true));
    echo "connecting...<br/>";

    $tableName = "20190101";
    $period1 = 3;
    $period2 = 5;
    echo "tablename:$tableName, tB:$period1, tE:$period2<br/>";
    $sqlSelect = "SELECT COUNT(*) FROM  :tablename  WHERE (periodBegin>= :t1 AND periodBegin<= :t2) OR (periodEnd >= :t1 AND periodEnd<= :t2)";
	$stmt = $conn -> prepare ( $sqlSelect );
	$stmt ->bindColumn(':tablename', $tableName, PDO::PARAM_STR);  //这里的问题
	$stmt ->bindColumn(':t1', $period1, PDO::PARAM_INT);
	$stmt ->bindColumn(':t2', $period2, PDO::PARAM_INT);
    $stmt ->execute();
    $result = $stmt->fetch();
    var_dump($result[0]);

错误原因:

bindParam() 不能绑定表名称。表名称需要使用字符串拼接的方式设定。

代码修改:

try {
    $conn = new PDO($dsn, $user, $pass,array(PDO::ATTR_PERSISTENT=>true));
    echo "connecting...<br/>";

    $tableName = "20190101";
    $period1 = 3;
    $period2 = 5;
    echo "tablename:$tableName, tB:$period1, tE:$period2<br/>";
    $sqlSelect = 'SELECT COUNT(*)  FROM  `'.$tableName.'`  WHERE (`periodBegin`>= :t1 AND `periodBegin`<= :t2)                                     OR (`periodEnd` >= :t1 AND `periodEnd`<= :t2)';
    $stmt = $conn -> prepare ( $sqlSelect );
    $stmt ->bindParam(':t1', $period1, PDO::PARAM_INT);
    $stmt ->bindParam(':t2', $period2, PDO::PARAM_INT);
    $stmt ->execute();
    $result = $stmt->fetch();
    var_dump($result[0]);
} catch (PDOException  $ex) {
    die ("Error!: " . $ex->getMessage() . "<br/>");
}

谢谢浏览,有问题麻烦指出,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值