具有COUNT(URL)查询的多个变量

时间:2016-03-22 00:51:12

标签: php mysql

下面的查询只包含一个变量($ MyURL)。但是当我添加$ MySection时,我开始收到此错误消息:

PDOStatement :: bindParam()期望参数3为long,字符串在中给出...

我知道如何在获取数组的查询中添加多个值,但这种查询对我来说很困惑。我做错了什么?

$sql= "SELECT COUNT(URL) AS num FROM pox_topics 
WHERE URL = :MyURL AND Site = 'PX' AND Section = ':MySection' AND Live != 0";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':MyURL',$MyURL,':MySection',$MySection,PDO::PARAM_STR);
$stmt->execute();
$Total = $stmt->fetch();

修改

我在$ MyURL,$ MySection之后使用PDO :: PARAM_STR尝试了以下查询,并跟随它们......

$sql= "SELECT COUNT(URL) AS num FROM pox_topics 
WHERE URL = :MyURL AND Site = 'PX' AND Section = :MySection AND Live != 0";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':MyURL',$MyURL,PDO::PARAM_STR);
$stmt->bindParam(':MySection',$MySection);
$stmt->execute();
$Total = $stmt->fetch();

但我收到此错误消息:“参数号无效:绑定变量数与令牌数不匹配”

1 个答案:

答案 0 :(得分:1)

':MySection'中的第二个绑定AND Section = ':MySection'周围有引号,需要删除。

然后你在同一个bindParam中使用你的两个绑定。他们需要单独发表声明。

$sql= "SELECT COUNT(URL) AS num FROM pox_topics 
WHERE URL = :MyURL AND Site = 'PX' AND Section = :MySection AND Live != 0";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':MyURL',$MyURL);
$stmt->bindParam(':MySection',$MySection,PDO::PARAM_STR);
$stmt->execute();
$Total = $stmt->fetch();

旁注:不确定您要使用哪一个PDO::PARAM_STR。分别调整。

还要确保这些变量具有值。如果失败,错误报告会给你一些事情。

手册http://php.net/manual/en/pdostatement.bindparam.php

中的示例
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

还使用PDO的错误处理: