我正在尝试使用prepare语句pdo将数据插入到数组中。
这就是我所做的:
$stmt = $pdo->prepare("SELECT * FROM settings");
$stmt->execute(array());
$row = $stmt->fetch(PDO::FETCH_ASSOC);
htmlspecialchars($row['site_name']);
htmlspecialchars($row['site_desc']);
htmlspecialchars($row['site_url']);
unset($stmt);
Usaqe:
$row['site_name'];
它工作正常,但我觉得我错过了一个重要的东西。
这是我的问题:
我是否必须在$stmt->execute(array());
中声明所有值
像这样:$stmt->execute(array(':site_name'=>$site_name, ':site_name'=>$site_name,));
在使用它之前?
这样做怎么办?
$a['site_name'] = htmlspecialchars($row['site_name']);
$a['site_desc'] = htmlspecialchars($row['site_desc']);
$a['site_url'] = htmlspecialchars($row['site_url']);
Usaqe:
$a['site_name'];
我播放了视频和教程,但无法制作第二个示例作品。
答案 0 :(得分:0)
由于没有使用变量(通常是用户输入),因此完全不需要使用prepared statement
,因此您只需使用常规query
方法。
$a=array();
$sql = 'select * from `settings`;';
$res = $pdo->query( $sql );
if( $res ){
while( $rs=$pdo->fetch( PDO::FETCH_OBJ ) ){
$a['site_name']=$rs->site_name;
$a['site_desc']=$rs->site_desc;
$a['site_url']=$rs->site_url;
}
}
但是,如果你有一些额外的查询参数(通常是where
子句),你可能想要使用prepared statement
,你可以在那里定义一个placeholder
和稍后为其分配一个值,以便在execute
方法
$sql='select * from `settings` where `site_name`=:site_name;';
$params=array(':site_name'=>'example.com');
$stmt=$pdo->prepare( $sql );
if( $stmt ){
$res=$pdo->execute( $params );
if( $res ){
while( $rs=$stmt->fetch( PDO::FETCH_OBJ ) ){
$a['site_name']=$rs->site_name;
$a['site_desc']=$rs->site_desc;
$a['site_url']=$rs->site_url;
}
}
}
答案 1 :(得分:0)
将$stmt->fetchAll(PDO::FETCH_ASSOC))
与Raim的回答一起使用