下面的查询只包含一个变量($ 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();
但我收到此错误消息:“参数号无效:绑定变量数与令牌数不匹配”
答案 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的错误处理: