PHP MySQLi/PDO_MySQL/PDO_SQLite CRUD(增查改删)
生活随笔
收集整理的這篇文章主要介紹了
PHP MySQLi/PDO_MySQL/PDO_SQLite CRUD(增查改删)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么80%的碼農都做不了架構師?>>> ??
PHP MySQLi:
http://php.net/mysqli
<?phpfunction db() {global $app;static $db; //1個請求內多個函數共用1個連接.if ($db) {return $db;} else {$db = @new mysqli($app['db_host'], $app['db_user'], $app['db_pass'], $app['db_name'], $app['db_port']);}if ($db->connect_errno) {echo $db->connect_error;exit();}$db->set_charset('utf8');return $db; }function insert($title = '', $content = '') {global $app;$db = db();$stmt = $db->prepare('INSERT INTO posts (post_title, post_content) VALUES (?, ?)');$stmt->bind_param('ss', $title, $content);$stmt->execute();//插入失敗,或者沒有AUTO_INCREMENT字段,或者不是INSERT語句,insert_id為0.return ($stmt->affected_rows !== 0 && $stmt->affected_rows !== -1) ? array(true, 'insert_id' => $stmt->insert_id) : array(false, 'insert_id' => $stmt->insert_id); }function select($id = '') {global $app;$db = db();if (!empty($id)) {return $db->query('SELECT * FROM posts WHERE id = '.intval($id))->fetch_all(MYSQLI_ASSOC);} else {return $db->query('SELECT * FROM posts')->fetch_all(MYSQLI_ASSOC);} }function select_v2($id = '') {global $app;$db = db();if (!empty($id)) {$stmt = $db->prepare('SELECT * FROM posts WHERE id = ?');$stmt->bind_param('i', $id);} else {$stmt = $db->prepare('SELECT * FROM posts');}$stmt->execute();//get_result和fetch_all需要mysqlnd支持,PHP從5.4開始內置mysqlnd.return $stmt->get_result()->fetch_all(MYSQLI_ASSOC); }function update($id, $title = '', $content = '') {global $app;$db = db();//var_export($db->query('SELECT @@autocommit')->fetch_all(MYSQLI_ASSOC)); exit(); //返回1可見MySQL默認會自動提交事務.$db->query('SET AUTOCOMMIT=0'); //$db->autocommit(false);//注意,InnoDB引擎會把寫操作(insert/update/delete)當做事務來處理.//所以commit提交事務后autocommit記得重新設為true,否則delete等這些寫操作因為沒有手動commit會自動回滾.$db->query('START TRANSACTION'); //$db->begin_transaction(); PHP從5.5開始才有這個函數.$stmt = $db->prepare('UPDATE posts SET post_title = ?, post_content = ? WHERE id = ?');$stmt->bind_param('ssi', $title, $content, $id);$stmt->execute();$db->query('COMMIT'); //$db->commit();//$db->query('ROLLBACK'); //$db->rollback();$db->query('SET AUTOCOMMIT=1'); //commit提交事務后autocommit記得重新設為true.//UPDATE時,如果更新的內容跟原來的內容一樣,affected_rows也會返回0.return ($stmt->affected_rows !== 0 && $stmt->affected_rows !== -1) ? true : false;//affected_rows://返回-1表示查詢出錯.//返回0表示沒有數據被修改.//返回1表示有1條數據被修改.//如果返回的值大于PHP_INT_MAX,這時affected_rows的類型是一個字符串. }function delete($id) {global $app;$db = db();$db->query('DELETE FROM posts WHERE id = '.intval($id));return ($db->affected_rows !== 0 && $db->affected_rows !== -1) ? true : false; }function delete_v2($id) {global $app;$db = db();$stmt = $db->prepare('DELETE FROM posts WHERE id = ?');$stmt->bind_param('i', $id);$stmt->execute();return ($stmt->affected_rows !== 0 && $stmt->affected_rows !== -1) ? true : false; }header('Content-Type: text/plain; charset=utf-8');//mysql -uroot -p -e "CREATE DATABASE IF NOT EXISTS tuxbase DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;GRANT ALL PRIVILEGES ON tuxbase.* TO tux@127.0.0.1 IDENTIFIED BY '913dab0c6788bb8f0';FLUSH PRIVILEGES;" $app = array('db_host' => '127.0.0.1','db_user' => 'tux','db_pass' => '913dab0c6788bb8f0','db_name' => 'tuxbase','db_port' => 3306 );$table = "CREATE TABLE IF NOT EXISTS posts (id int(10) unsigned NOT NULL AUTO_INCREMENT,post_title varchar(255) NOT NULL DEFAULT '',post_content text NOT NULL DEFAULT '',PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;";db()->query('DROP TABLE IF EXISTS posts;') or exit(); db()->query($table) or exit();echo "var_export(insert('標題1', '內容1'));\n"; var_export(insert('標題1', '內容1')); echo "\n\n";echo "var_export(insert('標題2', '內容2'));\n"; var_export(insert('標題2', '內容2')); echo "\n\n";echo "var_export(select());\n"; var_export(select()); echo "\n\n";echo "var_export(update(2, '標題2_更新','內容2_更新'));\n"; var_export(update(2, '標題2_更新','內容2_更新')); echo "\n\n";echo "var_export(select(2));\n"; var_export(select(2)); echo "\n\n";echo "var_export(delete(2));\n"; var_export(delete(2)); echo "\n\n";echo "var_export(select());\n"; var_export(select()); echo "\n\n";PHP PDO_MySQL:
http://php.net/pdo
<?phpfunction db() {global $app;static $db;if ($db) {return $db;} else {/* MySQL */try {$dsn = "mysql:dbname=$app[db_name];host=$app[db_host];port=$app[db_port];charset=utf8";$db = new PDO($dsn, $app['db_user'], $app['db_pass'], array(PDO::ATTR_PERSISTENT => false,PDO::ATTR_EMULATE_PREPARES => false,PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));} catch (PDOException $e) {echo $e->getMessage();exit();}/* SQLite try {$db = new PDO('sqlite:'.dirname(__FILE__).'/data.db3');} catch (PDOException $e) {echo $e->getMessage();exit();}*/}return $db; }function insert($title = '', $content = '') {global $app;$db = db();$stmt = $db->prepare('INSERT INTO posts (post_title, post_content) VALUES (?, ?)');$stmt->bindParam(1, $title, PDO::PARAM_STR);$stmt->bindParam(2, $content, PDO::PARAM_STR);$stmt->execute();//插入失敗,lastInsertId為0.return ($stmt->rowCount() !== 0) ? array(true, 'lastInsertId' => $db->lastInsertId()) : array(false, 'lastInsertId' => $db->lastInsertId()); }function select($id = '') {global $app;$db = db();if (!empty($id)) {return $db->query('SELECT * FROM posts WHERE id = '.intval($id))->fetchAll(PDO::FETCH_ASSOC);} else {return $db->query('SELECT * FROM posts')->fetchAll(PDO::FETCH_ASSOC);} }function select_v2($id = '') {global $app;$db = db();if (!empty($id)) {$stmt = $db->prepare('SELECT * FROM posts WHERE id = ?');$stmt->bindParam(1, $id, PDO::PARAM_INT);} else {$stmt = $db->prepare('SELECT * FROM posts');}$stmt->execute();return $stmt->fetchAll(PDO::FETCH_ASSOC); }function update($id, $title = '', $content = '') {global $app;$db = db();//echo PDO::ATTR_AUTOCOMMIT; //返回0可見PDO默認禁用自動提交事務.//echo $db->getAttribute(PDO::ATTR_AUTOCOMMIT); exit(); //返回1可見MySQL默認會自動提交事務.//SQLite不支持設置PDO::ATTR_AUTOCOMMIT://SQLite: Uncaught exception 'PDOException' with message 'The auto-commit mode cannot be changed for this driver'$db->setAttribute(PDO::ATTR_AUTOCOMMIT, false);$db->beginTransaction();//方法1(問號占位符)$stmt = $db->prepare('UPDATE posts SET post_title = ?, post_content = ? WHERE id = ?');$stmt->execute(array($title,$content,$id)); //所有值視作PDO::PARAM_STR處理//方法1(命名占位符)//$stmt = $db->prepare('UPDATE posts SET post_title = :title, post_content = :content WHERE id = :id');//$stmt->execute(array(':title' => $title,':content' => $content,':id' => $id)); //所有值視作PDO::PARAM_STR處理//方法2(問號占位符)//$stmt = $db->prepare('UPDATE posts SET post_title = ?, post_content = ? WHERE id = ?');//$stmt->bindParam(1, $title, PDO::PARAM_STR);//$stmt->bindParam(2, $content, PDO::PARAM_STR);//$stmt->bindParam(3, $id, PDO::PARAM_INT);//$stmt->execute();//方法2(命名占位符)//$stmt = $db->prepare('UPDATE posts SET post_title = :title, post_content = :content WHERE id = :id');//$stmt->bindParam(':title', $title, PDO::PARAM_STR);//$stmt->bindParam(':content', $content, PDO::PARAM_STR);//$stmt->bindParam(':id', $id, PDO::PARAM_INT);//$stmt->execute();//MySQLi只有一種寫法(MySQLi不支持命名占位符)//$stmt = $db->prepare('UPDATE posts SET post_title = ?, post_content = ? WHERE id = ?');//$stmt->bind_param('ssi', $title, $content, $id);echo 'sleep(3);'."\n";sleep(3);$db->commit();$db->setAttribute(PDO::ATTR_AUTOCOMMIT, true); //commit提交事務后autocommit記得重新設為truereturn ($stmt->rowCount() !== 0) ? true : false; }function delete($id) {global $app;$db = db();return ($db->query('DELETE FROM posts WHERE id = '.intval($id))->rowCount() !== 0) ? true : false; }function delete_v2($id) {global $app;$db = db();$stmt = $db->prepare('DELETE FROM posts WHERE id = ?');$stmt->bindParam(1, $id, PDO::PARAM_INT);$stmt->execute();return ($stmt->rowCount() !== 0) ? true : false; }header('Content-Type: text/plain; charset=utf-8');$app = array('db_host' => '127.0.0.1','db_user' => 'tux','db_pass' => '913dab0c6788bb8f0','db_name' => 'tuxbase','db_port' => 3306 );$mysql = "CREATE TABLE IF NOT EXISTS posts (id int(10) unsigned NOT NULL AUTO_INCREMENT,post_title varchar(255) NOT NULL DEFAULT '',post_content text NOT NULL DEFAULT '',PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;";$sqlite = "CREATE TABLE IF NOT EXISTS posts (id INTEGER PRIMARY KEY,post_title VARCHAR(255) NOT NULL,post_content TEXT NOT NULL )";db()->query('DROP TABLE IF EXISTS posts;') or exit(); db()->query($mysql) or exit();//并發(fā)時,SQLite在insert時因為庫文件被其他請求鎖住而導致阻塞 echo "var_export(insert('標題1', '內容1'));\n"; var_export(insert('標題1', '內容1')); echo "\n\n";echo "var_export(insert('標題2', '內容2'));\n"; var_export(insert('標題2', '內容2')); echo "\n\n";echo "var_export(select());\n"; var_export(select()); echo "\n\n";echo "var_export(update(2, '標題2_更新','內容2_更新'));\n"; var_export(update(2, '標題2_更新','內容2_更新')); echo "\n\n";echo "var_export(select(2));\n"; var_export(select(2)); echo "\n\n";echo "var_export(delete(2));\n"; var_export(delete(2)); echo "\n\n";echo "var_export(select());\n"; var_export(select()); echo "\n\n";PHP PDO_SQLite:
<?phpfunction db() {global $app;static $db;if ($db) {return $db;} else {/* MySQL try {$dsn = "mysql:dbname=$app[db_name];host=$app[db_host];port=$app[db_port];charset=utf8";$db = new PDO($dsn, $app['db_user'], $app['db_pass'], array(PDO::ATTR_PERSISTENT => false,PDO::ATTR_EMULATE_PREPARES => false,PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));} catch (PDOException $e) {echo $e->getMessage();exit();}*//* SQLite */try {$db = new PDO('sqlite:'.dirname(__FILE__).'/data.db3');} catch (PDOException $e) {echo $e->getMessage();exit();}}return $db; }function insert($title = '', $content = '') {global $app;$db = db();$stmt = $db->prepare('INSERT INTO posts (post_title, post_content) VALUES (?, ?)');$stmt->bindParam(1, $title, PDO::PARAM_STR);$stmt->bindParam(2, $content, PDO::PARAM_STR);$stmt->execute();return ($stmt->rowCount() !== 0) ? array(true, 'lastInsertId' => $db->lastInsertId()) : array(false, 'lastInsertId' => $db->lastInsertId()); }function select($id = '') {global $app;$db = db();if (!empty($id)) {return $db->query('SELECT * FROM posts WHERE id = '.intval($id))->fetchAll(PDO::FETCH_ASSOC);} else {return $db->query('SELECT * FROM posts')->fetchAll(PDO::FETCH_ASSOC);} }function select_v2($id = '') {global $app;$db = db();if (!empty($id)) {$stmt = $db->prepare('SELECT * FROM posts WHERE id = ?');$stmt->bindParam(1, $id, PDO::PARAM_INT);} else {$stmt = $db->prepare('SELECT * FROM posts');}$stmt->execute();return $stmt->fetchAll(PDO::FETCH_ASSOC); }function update($id, $title = '', $content = '') {global $app;$db = db();//echo PDO::ATTR_AUTOCOMMIT; //返回0可見PDO默認禁用自動提交事務.//echo $db->getAttribute(PDO::ATTR_AUTOCOMMIT); exit(); //返回1可見MySQL默認會自動提交事務.//SQLite不支持設置PDO::ATTR_AUTOCOMMIT://SQLite: Uncaught exception 'PDOException' with message 'The auto-commit mode cannot be changed for this driver'//$db->setAttribute(PDO::ATTR_AUTOCOMMIT, false);$db->beginTransaction();$stmt = $db->prepare('UPDATE posts SET post_title = ?, post_content = ? WHERE id = ?');$stmt->execute(array($title,$content,$id)); //所有值視作PDO::PARAM_STR處理//$stmt->execute(array(':title' => $title,':content' => $content,':id' => $id));//$stmt->bind_param('ssi', $title, $content, $id); //對比mysqliecho 'sleep(3);'."\n";sleep(3);$db->commit();//$db->setAttribute(PDO::ATTR_AUTOCOMMIT, true); //commit提交事務后autocommit記得重新設為truereturn ($stmt->rowCount() !== 0) ? true : false; }function delete($id) {global $app;$db = db();return ($db->query('DELETE FROM posts WHERE id = '.intval($id))->rowCount() !== 0) ? true : false; }function delete_v2($id) {global $app;$db = db();$stmt = $db->prepare('DELETE FROM posts WHERE id = ?');$stmt->bindParam(1, $id, PDO::PARAM_INT);$stmt->execute();return ($stmt->rowCount() !== 0) ? true : false; }header('Content-Type: text/plain; charset=utf-8');$app = array('db_host' => '127.0.0.1','db_user' => 'tux','db_pass' => '913dab0c6788bb8f0','db_name' => 'tuxbase','db_port' => 3306 );$mysql = "CREATE TABLE IF NOT EXISTS posts (id int(10) unsigned NOT NULL AUTO_INCREMENT,post_title varchar(255) NOT NULL DEFAULT '',post_content text NOT NULL DEFAULT '',PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;";$sqlite = "CREATE TABLE IF NOT EXISTS posts (id INTEGER PRIMARY KEY,post_title VARCHAR(255) NOT NULL,post_content TEXT NOT NULL )";db()->query('DROP TABLE IF EXISTS posts;') or exit(); db()->query($sqlite) or exit();//并發(fā)時,SQLite在insert時因為庫文件被其他請求鎖住而導致阻塞 echo "var_export(insert('標題1', '內容1'));\n"; var_export(insert('標題1', '內容1')); echo "\n\n";echo "var_export(insert('標題2', '內容2'));\n"; var_export(insert('標題2', '內容2')); echo "\n\n";echo "var_export(select());\n"; var_export(select()); echo "\n\n";echo "var_export(update(2, '標題2_更新','內容2_更新'));\n"; var_export(update(2, '標題2_更新','內容2_更新')); echo "\n\n";echo "var_export(select(2));\n"; var_export(select(2)); echo "\n\n";echo "var_export(delete(2));\n"; var_export(delete(2)); echo "\n\n";echo "var_export(select());\n"; var_export(select()); echo "\n\n";?
轉載于:https://my.oschina.net/eechen/blog/663332
總結
以上是生活随笔為你收集整理的PHP MySQLi/PDO_MySQL/PDO_SQLite CRUD(增查改删)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文笔记之:Instance-aware
- 下一篇: linux获取随机数的方法集合