編集:PHP PDOクエリ機能
以下の会話のため、以下の回答が正しいとマークしています。返信されていない部分への返信は自由にしてください。ここで確認してください。ありがとう。
= - = - = - = - = - = - = - = -
私は1つの機能がすべて準備された文を扱う持ってしようとしています。私の古いコードでは、selectクエリを使ってmysql_fetch_assoc-ingしていました。 Insert updateまたはDeleteを実行している場合に、私がselectと多分lastInsertIdまたは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の方が良いです。配列型の場合はパラメータをテストし、その結果の配列に項目を追加する必要があります –