편집 :PHP PDO 쿼리 함수
나는 아래의 대화 때문에 아래의 답변을 올바르게 표시하고 있습니다. 답이없는 부품에 대한 답변을 언제든지 보내 주시면 여기에서 다시 확인하겠습니다. 감사.
= - = - = - = - = - = - = - = - 나는 하나 개의 기능이 모두 준비된 명령문을 처리해야하기 위해 노력하고있어
. 이전의 코드에서는 select 쿼리를 통해 mysql_fetch_associng을 수행했습니다. Insert 또는 Update를 수행 할 때 select 및 maybeInsertId 또는 affectedRows 또는 무언가를 수행하는 경우 배열을 반환하고 싶습니다.
제 질문은 'select'또는 'insert'를 위해 sql을 구문 분석하거나 $ type = 'Select'와 같은 함수에 다른 매개 변수를 추가하는 것 외에 데이터가 있는지를 알려주는 PDO 클래스에 뭔가가 있습니까?
fetch 또는 fetchAll에 의해 반환 된 값이 true인지 테스트 할 수있는 곳을 보았습니다. 그게 내가해야할 일이야?
나는이 기능에 대한 의견도 제시한다.
function pdo_query($sql,$data)
{
$stmt = $dbh->prepare($sql);
$first_row = true;
if(is_array($data)){
foreach($data as $row){
if(is_array($row)){
foreach($row as $param => $value){
if($first_row){
//http://bugs.php.net/43130 parameters can't have dashes
$stmt->bindParam($param, ${substr(str_replace('-','_',$param),1)});
}
${substr(str_replace('-','_',$param),1)} = $value;
}
$stmt->execute();
$first_row = false;
}
}
while ($row = $stmt->fetch()) {
$return[] = $row;
}
}
return $return;
}
편집 : 나는 아직 시도하지 않은,하지만 $ stmnt-을위한 어떤 문제 테스트> 가져 오기()는 무엇입니까? 또한 lastInsertId() 또는 영향을받는 행을 자동으로 가져 오려는 경우 사실 이후에 수행중인 쿼리의 유형을 파악할 수없는 것처럼 보입니다. 여기 내가있는 위치 :
if ($rows = $stmt->fetchAll()) {
return $rows;
} else if (some_way_of_determining_if_an_insert_happened) {
return $dbh->lastInsertId();
} else {
return some_way_of_returning_affected_rows
}
}
왜 수동 바인딩이 필요합니까? 왜 그냥 ($ data)를 실행하지 않는가? –
흠 ... 나는 내가 알고 있다고 생각했다. 나는 바인딩이하는 것을보아야 할 것입니다. 귀하의 의견을 보내 주셔서 감사합니다. – Stephane
나는 한 번 비슷한 접근법을 가졌다 : http://stackoverflow.com/questions/3725879/fetchall-helper-function-using-pdo 그러나 매개 변수는 배열이 아니라 인라인을 사용한다. '$ db-> fetchAll ("SELECT * FROM table where a =? AND b =?", $ a, $ b)'dunno와 같은 것이 더 좋습니다. 그것은 그것이 배열 유형의 경우 매개 변수를 테스트해야하고 결과 값 배열에 아이템을 추가 할 수 있습니다. –