php - 使用 PDO 获取 ASSOC 数组而不使用准备好的语句
问题描述
我正在使用内部开关来确定结果的排序顺序,并且刚刚发现您不能使用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;
}
解决方案
该语句需要执行...
$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);
推荐阅读
- android - 您如何处理纯 TypeScript React Native 组件中的辅助功能手势?
- emacs - emacs 终端版本中的颜色看起来很奇怪
- postgresql - 从关系数据库填充 RDF 数据
- qt - 是否可以为每个配置文件配置 clang QtC 4.7 检查?
- python - 如何在 wtforms Flask 中覆盖名称
- python - 导入模块的 Python 范围和命名空间
- sql - Sql左键左键与空值
- java - ApachePOI pdf 创建
- python - 使用带有 VS Code 的 Windows Linux 子系统 bash 时出现“没有这样的文件或目录”
- javascript - mxGraph - 如果 mxCell 超出默认大小,如何自动将其调整为内容宽度