【问题标题】:PHP, MySQL and PDO - results from database missing apostrophesPHP、MySQL 和 PDO - 数据库缺少撇号的结果
【发布时间】:2014-06-30 17:00:44
【问题描述】:

我正在拔头发,希望有人能帮忙。

我已将我的查询函数从 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

【问题讨论】:

  • 什么撇号?标题字段?
  • 嗨,Marc - 是的,标题字段始终显示一个空格,其中撇号应该是。
  • 所以开始寻找它消失的地方。例如var_dump($row) 在你的循环中,然后在任何使用这个$result_array 的地方。上面的代码中没有任何东西会删除字符,所以我们帮不了你。
  • 当我将鼠标悬停在 $result_array 正在收集的结果上时,我可以看到它已经消失,因此它在这个函数和这个查询中的 deffo。我需要假发吗?
  • 哎呀-DOH!感谢您尝试帮助我马克 - 我现在意识到我已经超越了它,因为我一直在看错误的表格 - 销售缺少撇号:S

标签: php mysql pdo


【解决方案1】:

在您当前的代码中,您实际上查询了两次数据库,还有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();
}
?>

【讨论】:

  • 您仍然需要将$db_database, $db_user, $db_password 作为yada() 的参数传递
  • @meda 你的权利我忘了那个位大声笑,通常不用于在函数 ekk 中初始化 PDO ;p
  • 是的,它有点奇怪,如果有什么东西可以更清洁地传递连接本身;)
  • meda - 请自行传递连接是什么意思?
猜你喜欢
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 2011-09-17
  • 2021-12-06
  • 2015-12-20
  • 2017-08-30
  • 2012-11-21
相关资源
最近更新 更多