PHP PDO预处理语句中数组数据处理及execute参数疑问
你的PDO预处理与数据存储问题解答
嘿,让我帮你把这两个问题理清楚:
1. 关于$stmt->execute()里的参数是否必填
首先明确一点:你完全不需要在execute()里传入那些':site_name'=>$site_name之类的参数。
原因很简单:预处理语句里的参数绑定,是用来给SQL语句中的占位符(比如:id、:name这类带冒号的标记)赋值的。你的SQL是SELECT * FROM settings——这里没有任何占位符,所以execute()里传空数组(甚至不传参数,直接写$stmt->execute();)都是完全正确的。
只有当你的SQL包含动态条件时,比如:
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :user_id"); $stmt->execute(array(':user_id' => $userId));
这时候才需要把占位符对应的值传入execute()。你的场景里没有这种需求,所以之前的写法没问题。
2. 如何把处理后的数据存入新数组$a
你给出的赋值代码本身是正确的,可能没运行起来的原因大概率是没有先初始化数组,或者没确认$row是否成功获取到了数据。
可以试试这个完整的写法:
$stmt = $pdo->prepare("SELECT * FROM settings"); $stmt->execute(); // 先初始化空数组 $a = []; // 先判断是否成功获取到数据,避免$row为false时出错 if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $a['site_name'] = htmlspecialchars($row['site_name']); $a['site_desc'] = htmlspecialchars($row['site_desc']); $a['site_url'] = htmlspecialchars($row['site_url']); } unset($stmt);
之后你就可以正常用$a['site_name']来调用转义后的安全数据了。
如果还是不行,可以检查一下:
settings表中是否真的有数据site_name、site_desc、site_url这些字段名是否和数据库里的完全一致(注意大小写,有些数据库是区分的)
内容的提问来源于stack exchange,提问作者user1805543
相关产品推荐
相关产品推荐

