【问题标题】:PHP function doesn't pass argument to PDO queryPHP函数不将参数传递给PDO查询
【发布时间】:2014-12-28 07:06:07
【问题描述】:

为什么第二个参数没有传递给查询?

function LikesPastMonth($nMonth, $pid)
    {
        if($nMonth !== 0) {
            $n = $nMonth*-1-1;      
        } else {
            $n = -1;
        }
        $bdd = new PDO('mysql:host=localhost;dbname=xx', 'xx', 'xx', array(PDO::ATTR_PERSISTENT => true));
        $req = $bdd->prepare('SELECT * FROM likes WHERE thedate = DATE_ADD( DATE_ADD( LAST_DAY( CURDATE( ) ) , INTERVAL 1 DAY ) , INTERVAL '.$n.' MONTH ) AND pid = ?');
        $req->execute(array($pid));
        $result = $req->rowcount();
        if(!$result) {
            $result = 0;
        }
        return $result;
    }

使用常量而不是 arg 并且不准备查询是可行的。

define('pid','777');
$req = $bdd->query('SELECT * FROM likes WHERE thedate = DATE_ADD( DATE_ADD( LAST_DAY( CURDATE( ) ) , INTERVAL 1 DAY ) , INTERVAL '.$n.' MONTH ) AND pid = "'.pid.'"')->fetchColumn();

将 arg 直接放入查询中不起作用(我尝试过的 2 个示例):

1:

$req = $bdd->query('SELECT * FROM likes WHERE thedate = DATE_ADD( DATE_ADD( LAST_DAY( CURDATE( ) ) , INTERVAL 1 DAY ) , INTERVAL '.$n.' MONTH ) AND pid = "'.$pid.'"')->fetchColumn();

2:

$req = $bdd->query('SELECT * FROM likes WHERE thedate = DATE_ADD( DATE_ADD( LAST_DAY( CURDATE( ) ) , INTERVAL 1 DAY ) , INTERVAL '.$n.' MONTH ) AND pid = '.$pid.'')->fetchColumn();

【问题讨论】:

  • 如果在不准备语句的情况下将$pid 参数放入查询中也不起作用,则$pid 参数似乎具有空值。如果$pid 为空,则抛出异常,看看你是否发现任何错误。 (另外,如果您只想获取记录数,请使用 SELECT COUNT(*) 而不是实际选择所有记录。)

标签: php mysql pdo syntax


【解决方案1】:

从您的示例中,由于您将 777 封装在引号中,因此它可能无法正常工作。

你是不是这样称呼你的方法:

<?php
LikesPastMonth(3, 1);
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 2014-08-23
    • 1970-01-01
    相关资源
    最近更新 更多