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];
다음 $dbh
은 PDO db 연결기이며 id
테이블 users
을 기반으로 username
사용하여fetch();
나는 이것이 누군가에게 도움이되기를 바랍니다.
답변
방법 1 : PDO 쿼리 방법 사용
$stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"');
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
행 수 얻기
$stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"');
$row_count = $stmt->rowCount();
echo $row_count.' rows selected';
방법 2 : 매개 변수가있는 문
$stmt = $db->prepare("SELECT id FROM Employee WHERE name=?");
$stmt->execute(array($name));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
방법 3 : 매개 변수 결합
$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);
이 링크 에서 더 많은 것을 알고 싶습니다
답변
단일 페이지에서 인라인 코딩을 사용하고이 전체 예제를 사용하는 것보다 oops를 사용하지 않는 경우 도움이 될 것입니다.
//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 />";
}
답변
