如何在PHP中将数据插入数组准备语句?

时间:2018-05-22 06:58:43

标签: php mysql arrays pdo

我正在尝试使用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'];

我播放了视频和教程,但无法制作第二个示例作品。

2 个答案:

答案 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的回答一起使用