我拔出头发,希望有人可以帮忙。
我已将我的查询功能从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
答案 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();
}
?>