在不使用准备语句的情况下使用 PDO 获取 ASSOC 数组
Get ASSOC array with PDO without using prepared statement
我正在使用内部开关来确定结果的排序顺序,并且刚刚发现您不能使用 PDO
来绑定某些参数(例如选择 table 或指定排序顺序)以这种方式。
所以我现在尝试 return 我的结果而不使用 ->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;
}
语句需要执行...
$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);
PDO::query
manual 向您展示如何处理由 query
方法返回的结果:
$results = $db->query("SELECT * from tracks WHERE online = 1", PDO::FETCH_ASSOC);
foreach ($results as $row) {
print $row;
}
我正在使用内部开关来确定结果的排序顺序,并且刚刚发现您不能使用 PDO
来绑定某些参数(例如选择 table 或指定排序顺序)以这种方式。
所以我现在尝试 return 我的结果而不使用 ->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;
}
语句需要执行...
$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);
PDO::query
manual 向您展示如何处理由 query
方法返回的结果:
$results = $db->query("SELECT * from tracks WHERE online = 1", PDO::FETCH_ASSOC);
foreach ($results as $row) {
print $row;
}