programing

PDO를 사용하여 PHP의 결과 배열을 가져오려면 어떻게 해야 합니까?

padding 2023. 10. 15. 17:03
반응형

PDO를 사용하여 PHP의 결과 배열을 가져오려면 어떻게 해야 합니까?

SQL 주입 공격을 읽고 검색 스크립트를 편집하는 중입니다.일반 MySQL 연결 대신 PDO를 사용하여 스크립트에서 동일한 기능을 가져오려고 합니다.그래서 PDO에 대한 다른 게시물을 읽어보았지만 확실하지 않습니다.이 두 스크립트가 동일한 기능을 제공합니까?

PDO 사용:

$pdo = new PDO('mysql:host=$host; dbname=$database;', $user, $pass);
$stmt = $pdo->prepare('SELECT * FROM auction WHERE name = :name');
$stmt->bindParam(':name', $_GET['searchdivebay']);
$stmt->execute(array(':name' => $name);

일반 MySQL 사용 시:

$dbhost = @mysql_connect($host, $user, $pass) or die('Unable to connect to server');

@mysql_select_db('divebay') or die('Unable to select database');
$search = $_GET['searchdivebay'];
$query = trim($search);

$sql = "SELECT * FROM auction WHERE name LIKE '%" . $query . "%'";

if(!isset($query)){
    echo 'Your search was invalid';
    exit;
} //line 18

$result = mysql_query($trim);
$numrows = mysql_num_rows($result);
mysql_close($dbhost);

사용할 일반적인 예로 진행합니다.

while($i < $numrows){
    $row = mysql_fetch_array($result);

데이터베이스에서 일치하는 결과 배열을 만듭니다.PDO로 어떻게 해야 합니까?

방법을 한 번 보세요.반복기 패턴으로 사용할 수도 있습니다.

코드 샘플fetchAll, PHP 설명서에서 다음을 참조하십시오.

<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

/* Fetch all of the remaining rows in the result set */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll(\PDO::FETCH_ASSOC);
print_r($result);

결과:

Array
(
    [0] => Array
        (
            [NAME] => pear
            [COLOUR] => green
        )

    [1] => Array
        (
            [NAME] => watermelon
            [COLOUR] => pink
        )
)

PDO 문으로 반환되는 여러 행을 가져오는 방법은 세 가지입니다.

가장 간단한 것은 PDO 문 자체를 반복하는 것입니다.

$stmt = $pdo->prepare("SELECT * FROM auction WHERE name LIKE ?")
$stmt->execute(array("%$query%"));
// iterating over a statement
foreach($stmt as $row) {
    echo $row['name'];
}

다른 하나는 익숙한 상태에서 fetch() 메서드를 사용하여 행을 가져오는 것입니다.

$stmt = $pdo->prepare("SELECT * FROM auction WHERE name LIKE ?")
$stmt->execute(array("%$query%"));
// using while
while($row = $stmt->fetch()) {
    echo $row['name'];
}

그러나 최신 웹 애플리케이션의 경우 데이터베이스 상호 작용을 출력에서 분리해야 하므로 가장 편리한 방법은 fetchAll() 메서드를 사용하여 모든 행을 한 번에 가져오는 것입니다.

$stmt = $pdo->prepare("SELECT * FROM auction WHERE name LIKE ?")
$stmt->execute(array("%$query%"));
// fetching rows into array
$data = $stmt->fetchAll();

또는 일부 데이터를 먼저 전처리해야 하는 경우 while 루프를 사용하여 수동으로 데이터를 배열로 수집합니다.

$result = [];
$stmt = $pdo->prepare("SELECT * FROM auction WHERE name LIKE ?")
$stmt->execute(array("%$query%"));
// using while
while($row = $stmt->fetch()) {
    $result[] = [
        'newname' => $row['oldname'],
        // etc
    ];
}

그런 다음 템플릿으로 출력합니다.

<ul>
<?php foreach($data as $row): ?>
    <li><?=$row['name']?></li>
<?php endforeach ?>
</ul>

PDO는 여러 가지 정교한 페치 모드를 지원하므로 fetchAll()이 여러 가지 다른 형식으로 데이터를 반환할 수 있습니다.

언급URL : https://stackoverflow.com/questions/10911757/how-can-i-use-pdo-to-fetch-a-results-array-in-php

반응형