我正在使用内部开关来确定结果的排序顺序,并且刚刚发现您不能使用PDO
来绑定某些参数(例如选择表或指定排序顺序)方式。
所以我现在正尝试使用->query
这样不绑定的方式返回我的结果(暂时忽略排序部分):
$results = $db->query("SELECT * from tracks WHERE online = 1", PDO::FETCH_ASSOC);
但是当我print_r($results)
时,我只是得到PDO对象语句:
PDOStatement Object
(
[queryString] => SELECT * from tracks WHERE online = 1
)
我在这里做什么错了?
这是我的PDO连接:
protected static function getDB()
{
static $db = null;
if ($db === null) {
$dbhost = getenv('DB_HOST');
$dbuser = getenv('DB_USER');
$dbpass = getenv('DB_PASS');
$dbname = getenv('DB_NAME');
try {
$db = new PDO("mysql:host=$dbhost;dbname=$dbname;charset=utf8mb4",
$dbuser, $dbpass);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo $e->getMessage();
}
}
return $db;
}
答案 0 :(得分:1)
该语句需要执行...
$stmt = $db->query("SELECT * from tracks WHERE online = 1");
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
将其作为第二个参数传递也应该起作用:
$stmt = $db->query("SELECT * from tracks WHERE online = 1", PDO::FETCH_ASSOC);
$data = $stmt->fetchAll();
或单线:
$data = $db->query("SELECT * from tracks WHERE online = 1")->fetchAll(PDO::FETCH_ASSOC);
还有:
$stmt->setFetchMode(PDO::FETCH_ASSOC);
答案 1 :(得分:0)
PDO::query
manual向您展示如何处理由query
方法返回的结果:
$results = $db->query("SELECT * from tracks WHERE online = 1", PDO::FETCH_ASSOC);
foreach ($results as $row) {
print $row;
}