php mysql PDOクエリー操作のインスタンスの詳細
7007 ワード
php mysql PDOクエリー操作のインスタンスの詳細
1接続の確立
永続リンクPDO::ATTR_PERSISTENT=>true
2.スナップエラー
3.取引の
4.エラー処理
a.サイレントモード(デフォルトモード)
1.query()の使用
2.prepare,bindParamおよびexecuteを使用する[推奨するとともに、追加、変更、削除]
3.物事
PDOの一般的な方法:
PDO::query()は、主に記録結果が返される操作(PDOStatement)、特にselect操作に使用されます.PDO::exec()は、主に結果セットが返されない操作に対して使用されます.Insert、updateなどの操作.影響するローの数を返します.PDO::lastInsertId()は、前回の挿入操作の最後のIDを返しますが、insert into tb(col 1,col 2)values(v 1,v 2),(v 11,v 22)..のように一度に複数のレコードを挿入し、lastinsertid()は、最後のレコードが挿入されたレコードIDではなく、最初の(v 1,v 2)が挿入されたときのIDを返します.PDOStatement::fetch()は、レコードを取得するために使用されます.whileに合わせて遍歴します.PDOStatement::fetchAll()は、すべてのレコードセットを1つに取得します.PDOStatement::fetchcolumn([int column_indexnum])直接アクセスカラム、パラメータcolumn_indexnumは、この列の行の0からインデックス値ですが、この方法では一度に同じ行の列しか取得できず、一度実行すれば次の行にジャンプします.したがって、カラムに直接アクセスする場合に便利ですが、複数のカラムを巡回する場合には使用できません.PDOStatement::rowcount()は、query(「select...」)を使用する場合に適用されます.メソッドの場合、レコードの数を取得します.前処理にも使用できます.$stmt->rowcount(); PDOStatement::columncount()はquery(「select...」)を使用する場合に適用されます.メソッドの場合、レコードのカラム数を取得します.
注記:
1、fetchかfetchallか.
メモセットの場合、fetchallを使用すると効率が高く、データベースからの検索回数が減少するが、大きな結果セットではfetchallを使用するとシステムに大きな負担をもたらす.データベースのWEBフロントエンドへの転送量が大きすぎると、かえって効率が悪くなります.
2、fetch()またはfetchall()にはいくつかのパラメータがあります.
fetch_スタイルパラメータ:
■$row=$rs->fetchAll(PDO::FETCH_BOTH); FETCH_BOTHはデフォルトで、省略可能で、関連付けとインデックスを返します.■$row=$rs->fetchAll(PDO::FETCH_ASSOC); FETCH_ASSOCパラメータは,返すのは関連配列のみであることを決定する.■$row=$rs->fetchAll(PDO::FETCH_NUM); インデックス配列■$row=$rs->fetchAll(PDO::FETCH_OBJ);fetch()の場合はオブジェクトを返し、fetchall()の場合はオブジェクトからなる2 D配列を返します.
もし疑問があれば伝言を残してあるいは当駅のコミュニティに行って討論を交流して、読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->exec('set names utf8');
/* */
//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password";
$sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>'kevin2',':password'=>''));
echo $dbh->lastinsertid();
/* */
$sql = "UPDATE `user` SET `password`=:password WHERE `user_id`=:userId";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':userId'=>'7', ':password'=>'4607e782c4d86fd5364d7e4508bb10d9'));
echo $stmt->rowCount();
/* */
$sql = "DELETE FROM `user` WHERE `login` LIKE 'kevin_'"; //kevin%
$stmt = $dbh->prepare($sql);
$stmt->execute();
echo $stmt->rowCount();
/* */
$login = 'kevin%';
$sql = "SELECT * FROM `user` WHERE `login` LIKE :login";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$login));
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
print_r($row);
}
print_r( $stmt->fetchAll(PDO::FETCH_ASSOC));
?>
1接続の確立
true
));
?>
永続リンクPDO::ATTR_PERSISTENT=>true
2.スナップエラー
setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$dbh->exec("SET CHARACTER SET utf8");
$dbh=null; //
}catch(PDOException$e){
print"Error!:".$e->getMessage()."
";
die();
}
?>
3.取引の
setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction();//
$dbh->exec("insertintostaff(id,first,last)values(23,'Joe','Bloggs')");
$dbh->exec("insertintosalarychange(id,amount,changedate)
values(23,50000,NOW())");
$dbh->commit();//
}catch(Exception$e){
$dbh->rollBack();//
echo"Failed:".$e->getMessage();
}
?>
4.エラー処理
a.サイレントモード(デフォルトモード)
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT); //
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);// ,
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);// ,PDOException
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':country', $country, PDO::PARAM_STR);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print $row['Name'] . "/t";
}
} // if there is a problem we can handle it here
catch (PDOException $e) {
echo 'PDO Exception Caught. ';
echo 'Error with the database:
';
echo 'SQL Query: ', $sql;
echo 'Error: ' . $e->getMessage();
}
?>
1.query()の使用
query($sql); $sql $dbh->quote($params); //
$sql = 'Select * from city where CountryCode ='.$dbh->quote($country);
foreach ($dbh->query($sql) as $row) {
print $row['Name'] . "/t";
print $row['CountryCode'] . "/t";
print $row['Population'] . "/n";
}
?>
2.prepare,bindParamおよびexecuteを使用する[推奨するとともに、追加、変更、削除]
prepare($sql); PDOStatement
PDOStatement->bindParam()
PDOStatement->execute();//
?>
3.物事
query('set names utf8;');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction();
$dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('mick', 22);");
$dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('lily', 29);");
$dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('susan', 21);");
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
echo "Failed: " . $e->getMessage();
}
?>
PDOの一般的な方法:
PDO::query()は、主に記録結果が返される操作(PDOStatement)、特にselect操作に使用されます.PDO::exec()は、主に結果セットが返されない操作に対して使用されます.Insert、updateなどの操作.影響するローの数を返します.PDO::lastInsertId()は、前回の挿入操作の最後のIDを返しますが、insert into tb(col 1,col 2)values(v 1,v 2),(v 11,v 22)..のように一度に複数のレコードを挿入し、lastinsertid()は、最後のレコードが挿入されたレコードIDではなく、最初の(v 1,v 2)が挿入されたときのIDを返します.PDOStatement::fetch()は、レコードを取得するために使用されます.whileに合わせて遍歴します.PDOStatement::fetchAll()は、すべてのレコードセットを1つに取得します.PDOStatement::fetchcolumn([int column_indexnum])直接アクセスカラム、パラメータcolumn_indexnumは、この列の行の0からインデックス値ですが、この方法では一度に同じ行の列しか取得できず、一度実行すれば次の行にジャンプします.したがって、カラムに直接アクセスする場合に便利ですが、複数のカラムを巡回する場合には使用できません.PDOStatement::rowcount()は、query(「select...」)を使用する場合に適用されます.メソッドの場合、レコードの数を取得します.前処理にも使用できます.$stmt->rowcount(); PDOStatement::columncount()はquery(「select...」)を使用する場合に適用されます.メソッドの場合、レコードのカラム数を取得します.
注記:
1、fetchかfetchallか.
メモセットの場合、fetchallを使用すると効率が高く、データベースからの検索回数が減少するが、大きな結果セットではfetchallを使用するとシステムに大きな負担をもたらす.データベースのWEBフロントエンドへの転送量が大きすぎると、かえって効率が悪くなります.
2、fetch()またはfetchall()にはいくつかのパラメータがあります.
mixed pdostatement::fetch([int fetch_style [,int cursor_orientation [,int cursor_offset]]])
array pdostatement::fetchAll(int fetch_style)
fetch_スタイルパラメータ:
■$row=$rs->fetchAll(PDO::FETCH_BOTH); FETCH_BOTHはデフォルトで、省略可能で、関連付けとインデックスを返します.■$row=$rs->fetchAll(PDO::FETCH_ASSOC); FETCH_ASSOCパラメータは,返すのは関連配列のみであることを決定する.■$row=$rs->fetchAll(PDO::FETCH_NUM); インデックス配列■$row=$rs->fetchAll(PDO::FETCH_OBJ);fetch()の場合はオブジェクトを返し、fetchall()の場合はオブジェクトからなる2 D配列を返します.
もし疑問があれば伝言を残してあるいは当駅のコミュニティに行って討論を交流して、読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!