IT story

매개 변수가있는 SELECT 쿼리에 PDO 개체를 올바르게 사용하는 방법

hot-time 2020. 9. 15. 19:26
반응형

매개 변수가있는 SELECT 쿼리에 PDO 개체를 올바르게 사용하는 방법


SELECT쿼리 를 수행하기 위해 PHP.net 지침을 따르려고 시도했지만이 작업을 수행 하는 가장 좋은 방법이 확실하지 않습니다.

SELECT가능한 경우 매개 변수화 된 쿼리 를 사용 ID하여 name필드가 매개 변수와 일치 하는 테이블에서을 반환하고 싶습니다 . ID고유하므로 하나를 반환해야합니다 .

그때처럼은을 사용하는 것입니다 ID위해 INSERT이 성공인지 아닌지 내가 결정해야 할 것이다, 그래서 다른 테이블로.

또한 재사용을 위해 쿼리를 준비 할 수 있다는 것도 읽었지만 이것이 어떻게 도움이되는지 잘 모르겠습니다.


다음과 같은 데이터를 선택합니다.

$db = new PDO("...");
$statement = $db->prepare("select id from some_table where name = :name");
$statement->execute(array(':name' => "Jimbo"));
$row = $statement->fetch(); // Use fetchAll() if you want all results, or just iterate over the statement, since it implements Iterator

동일한 방식으로 삽입합니다.

$statement = $db->prepare("insert into some_other_table (some_id) values (:some_id)");
$statement->execute(array(':some_id' => $row['id']));

오류 발생시 예외를 발생 시키도록 PDO를 구성하는 것이 좋습니다. 그런 다음 PDOException쿼리 중 하나라도 실패하면-명시 적으로 확인할 필요가 없습니다. 예외를 설정하려면 $db개체를 만든 직후에 다음을 호출하십시오 .

$db = new PDO("...");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

나는 최근에 PDO로 작업하고 있으며 위의 대답은 완전히 옳았지만 다음도 작동한다는 것을 문서화하고 싶었습니다.

$nametosearch = "Tobias";
$conn = new PDO("server", "username", "password");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sth = $conn->prepare("SELECT `id` from `tablename` WHERE `name` = :name");
$sth->bindParam(':name', $nametosearch);
// Or sth->bindParam(':name', $_POST['namefromform']); depending on application
$sth->execute();

bindParam또는 bindValue방법을 사용 하여 진술을 준비 할 수 있습니다. $check->execute(array(':name' => $name));특히 여러 값 / 변수를 바인딩하는 경우 작업을 수행하는 대신 첫눈에 더 명확하게 합니다.

아래에서 명확하고 읽기 쉬운 예를 확인하십시오.

$q = $db->prepare("SELECT id FROM table WHERE forename = :forename and surname = :surname LIMIT 1");
$q->bindValue(':forename', 'Joe');
$q->bindValue(':surname',  'Bloggs');
$q->execute();

if ($q->rowCount() > 0){
    $check = $q->fetch(PDO::FETCH_ASSOC);
    $row_id = $check['id'];
    // do something
}

여러 행을 예상 하는 경우을 제거 LIMIT 1하고 가져 오기 방법을 fetchAll다음 으로 변경하십시오 .

$q = $db->prepare("SELECT id FROM table WHERE forename = :forename and surname = :surname");// removed limit 1
$q->bindValue(':forename', 'Joe');
$q->bindValue(':surname',  'Bloggs');
$q->execute();

if ($q->rowCount() > 0){
    $check = $q->fetchAll(PDO::FETCH_ASSOC);
    //$check will now hold an array of returned rows. 
    //let's say we need the second result, i.e. index of 1
    $row_id = $check[1]['id']; 
    // do something
}

사용 가능한 모든 준비와 함께 약간의 완전한 답변이 여기에 있습니다.

    $sql = "SELECT `username` FROM `users` WHERE `id` = :id";
    $q = $dbh->prepare($sql);
    $q->execute(array(':id' => "4"));
    $done= $q->fetch();

 echo $done[0];

Here $dbh is PDO db connecter, and based on id from table users we've get the username using fetch();

I hope this help someone, Enjoy!


Method 1:USE PDO query method

$stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"');
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

Getting Row Count

$stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"');
$row_count = $stmt->rowCount();
echo $row_count.' rows selected';

Method 2: Statements With Parameters

$stmt = $db->prepare("SELECT id FROM Employee WHERE name=?");
$stmt->execute(array($name));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

Method 3:Bind parameters

$stmt = $db->prepare("SELECT id FROM Employee WHERE name=?");
$stmt->bindValue(1, $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

**bind with named parameters**
$stmt = $db->prepare("SELECT id FROM Employee WHERE name=:name");
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

or
$stmt = $db->prepare("SELECT id FROM Employee WHERE name=:name");
$stmt->execute(array(':name' => $name));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

Want to know more look at this link


if you are using inline coding in single page and not using oops than go with this full example, it will sure help

//connect to the db
$dbh = new PDO('mysql:host=localhost;dbname=mydb', dbuser, dbpw); 

//build the query
$query="SELECT field1, field2
FROM ubertable
WHERE field1 > 6969";

//execute the query
$data = $dbh->query($query);
//convert result resource to array
$result = $data->fetchAll(PDO::FETCH_ASSOC);

//view the entire array (for testing)
print_r($result);

//display array elements
foreach($result as $output) {
echo output[field1] . " " . output[field1] . "<br />";
}

참고URL : https://stackoverflow.com/questions/767026/how-can-i-properly-use-a-pdo-object-for-a-parameterized-select-query

반응형