我正在尝试运行一个简单的SELECT查询。这是查询
$sql1=$conn->prepare("SELECT q.quoteid, q.customername, q.customersurname, q.timestamp, o.name
FROM quotes as q, occasions as o
WHERE q.occasionid=o.occasionid
AND companyid=1
AND q.day=:day
AND q.month=:month
AND q.year=:year
AND staffid='-1'
AND (q.complete != 'W' OR q.complete != 'Y')
AND q.online=0");
$sql1->execute($exearray);
/* here $exearray contain following value */
Array ( [:day] => 24 [:month] => 1 [:year] => 2014 )
它甚至没有显示任何错误。 如果我在月份中传递静态值1,则显示数据。 我直接在DB上运行这个查询。
所以我认为查询中没有错误。 我在MAMP本地运行此查询。
答案 0 :(得分:0)
您是否曾尝试将您的月份数据解析为字符串,然后再转到pdo ???
$exearray = array(':day'=>24, ':month'=>(string)1, ':year'=>2014);
一旦我遇到这种情况,我就这样做了,这对我有用。 我试图在mysql中使用LIMIT命令时总是遇到这个问题。我只是将我的值解析为字符串或通过静态传递它。 它与你的MAMP无关。我在LAMP和WAMP上也有这个问题。 显然这是PDO库中常见的问题。
并且对于记录,请不要忘记在将月份变量直接传递给查询时使用intval()
。
答案 1 :(得分:0)
你需要获取你的结果,execute只返回一个布尔值(true或false),无论查询执行是否成功。
示例:
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* Fetch all of the remaining rows in the result set */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);
答案 2 :(得分:0)
也许使用参数进行“长途”,和/或更改查询以使用连接会有所帮助。
此外,PDOException上的try / catch可能会提供更多信息。
最后,请注意调用$ cmd-> fetch(PDO :: FETCH_ASSOC)来迭代记录集。
try {
$db = new PDO("mysql:host=localhost;charset=utf8", "root", "root");
$cmd = $db->prepare("
SELECT q.quoteid, q.customername, q.customersurname,
q.timestamp, o.name
FROM quotes q
LEFT JOIN occasions o on q.occasionid = o.occasionid
WHERE companyid=1
AND q.day = :day
AND q.month = :month
AND q.year = :year
AND staffid = '-1'
AND (q.complete != 'W' OR q.complete != 'Y')
AND q.online = 0
");
$cmd->bindParam(':day', 24, PDO::PARAM_INT);
$cmd->bindParam(':month', 1, PDO::PARAM_INT);
$cmd->bindParam(':year', 2014, PDO::PARAM_INT);
if ($cmd->execute()) {
while ($row = $cmd->fetch(PDO::FETCH_ASSOC)) {
echo $row['quoteid']."|".$row['customername']."|".$row['name']."<br/>";
}
} else {
echo "$cmd->execute() returned false.";
}
} catch (PDOException $e) { echo $e->getMessage(); return; }
答案 3 :(得分:0)
在表月中,列类型为Varchar。 我将其更改为整数,现在它正在工作。
P.S。我尝试在变量之前使用(字符串),甚至在变量值上使用双引号和单引号,但它不起作用。
谢谢大家。 :)