繁体   English   中英

PDO查询不起作用

[英]PDO query is not working

我正在尝试运行一个简单的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,则会显示数据。 我直接在数据库上运行此查询。

因此,我认为查询中没有错误。 我在MAMP上本地运行此查询。

在传递给pdo之前,您是否尝试过将月份的数据解析为字符串???

$exearray = array(':day'=>24, ':month'=>(string)1, ':year'=>2014);

一旦我遇到这种情况,我做到了,它对我有用。 我在mysql中尝试使用LIMIT命令时总是遇到此问题。 我只是将我的值解析为字符串或将其静态传递。 它与您的MAMP无关。 我在LAMP和WAMP上也有这个问题。 显然,这是PDO库中的常见问题。

为了记录在案,不要忘了在将月份变量直接传递给查询时使用intval()

您需要获取结果,无论查询执行成功与否,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);

来自: http : //php.net/manual/en/pdostatement.fetchall.php

也许使用参数进行“长途”,和/或将查询更改为使用联接会有所帮助。

此外,对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; }

在表月份中,列类型为Varchar。 我将其更改为整数,现在可以正常工作了。

ps我试过在变量之前使用(string),甚至在变量值上使用双引号和单引号,但没有用。

谢谢大家。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM