PHP,MySQL和PDO - 数据库缺失撇号的结果

时间:2014-06-30 17:00:44

标签: php mysql pdo

我拔出头发,希望有人可以帮忙。

我已将我的查询功能从mysql更改为mysqli到PDO,仍然无法获得显示撇号的结果 - 我可以在数据库字段中看到它们,所以知道它们在那里。

我正在使用一个类和一个函数,我将查询提供给另一个页面:

我的查询:

SELECT sum(quantity) as Total, sum(earnings) as Revenue, title 
from `sales` 
WHERE name = 'john smith' 
AND paid = 'y' 
AND earnings >0 
GROUP BY title

我的功能:

   $db = new PDO("mysql:host=" . $db_host .";dbname=" . $db_database . ";charset=UTF-8",$db_user,$db_password,array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

               $SQL = $query; 
               $stmt = $db->prepare($SQL);             
               $stmt->execute();

            $stmt = $db->query($SQL);

            while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
            {
                    $result_array[] = $row;                      

            }  

            $db = null;

        return $result_array;

数据正在从数据库中提取而没有问题,除了撇号在它应该的位置丢失。这导致我出现问题,因为我后来使用此数据搜索另一个表并且无法匹配。

我真的希望有人能在我完全秃顶之前帮助我。

感谢所有的帮助,请善待:D

1 个答案:

答案 0 :(得分:2)

在您当前的代码中实际查询数据库两次,还有PDO::fetchAll,它将返回您尝试循环的内容。另外,为了更好的代码,可以在函数之外初始化PDO连接,并使用global关键字在函数中获取$db的范围,或者将$db作为参数传递给函数。

<?php 
$db = new PDO("mysql:host=" . $db_host .";dbname=".$db_database, $db_user, $db_password,
    array(
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    )
);

function select_sales($name='', $paid='y'){
    global $db;

    $query = "SELECT sum(quantity) as Total,
                 sum(earnings) as Revenue, 
                 title 
              FROM `sales` 
              WHERE `name` = :name AND paid = :paid AND earnings >0 
              GROUP BY `title`";

    $stmt = $db->prepare($query);

    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':paid', $paid);

    $stmt->execute();

    return $stmt->fetchAll();
}
?>