Maison > Article > base de données > Explication détaillée de PHP connectant les données MySQL via Mysqli et PDO
Dans le développement réel, les classes d'opération de base de données sont rarement écrites par elles-mêmes et sont principalement implémentées via certains frameworks. pour emprunter des manuels pour l'écrire moi-même, je pense donc qu'il est nécessaire de résumer la méthode de connexion de php à mysql. php peut se connecter à mysql via l'extension mysql, l'extension mysqli et l'extension pdo, car les versions supérieures de php seront supprimées. série de méthodes, seules les deux autres méthodes de connexion sont résumées ici. Nous devons d'abord nous assurer que ces deux extensions de php sont activées. Vérifiez le fichier de configuration php.ini comme suit :
Conseils, si quelqu'un disait que j'avais ouvert la bibliothèque d'extensions (c'est-à-dire que j'avais supprimé le ';' devant), mais que continuait à me dire que les méthodes de la série mysqli_ ou pdo étaient introuvables, c'est probablement parce que vous Le répertoire où se trouve la bibliothèque d'extension n'est pas spécifié. Recherchez le paramètre extension_dir et précisez le répertoire où se trouve l'extension
extension_dir = "D:/wamp/bin/php/php5.5.12/ext/"
Fichier de configuration
Tout d'abord, nous séparons les fichiers de configuration nécessaires à la connexion à la base de données, afin de ne pas avoir besoin de les écrire à chaque fois. En cas de besoin, il suffit de les inclure ou de les exiger directement. Si vous n'êtes pas clair sur l'inclusion et l'exigence, vous pouvez vérifier http://www.php.cn/
Nom du fichier conf.php
return array( 'host'=>'127.0.0.1', 'user'=>'root', 'password'=>'',//因为测试,我就不设置密码,实际开发中,必须建立新的用户并设置密码 'dbName'=>'xxpt', 'charSet'=>'utf8', 'port'=>'3306' );
mysqli a deux façons de se connecter à mysql et prend en charge le prétraitement, l’un est orienté objet et l’autre est orienté processus.
$dbConf=include 'conf.php'; function openDb($dbConf){ $conn=mysqli_connect($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']) or die('打开失败'); //当然如上面不填写数据库也可通过mysqli_select($conn,$dbConf['dbName'])来选择数据库 mysqli_set_charset($conn,$dbConf['charSet']);//设置编码 return $conn; } function closeDb($conn){ mysqli_close($conn); } //1.打开连接 $conn=openDb($dbConf); //2query方法执行增、查、删、改 $sql='SELECT t.`id1` from `t1` as t'; /*************数据查询***************************/ $rs=$conn->query($sql); //从结果集中读取数据 //fetch_assoc:返回键值对形式,键位字段名、fetch_row:返回键值对形式,键值为数值、fetch_array:返回1和2两种形式的组合 $data=array();//保存数据 while($tmp=mysqli_fetch_assoc($rs)){//每次从结果集中取出一行数据 $data[]=$tmp; } //对数据进行相应的操作 print_r($data);//输出数据 /*************数据插入***************************/ $sql='INSERT INTO `t1`(`id1`,`id2`) VALUES(3,4);'; $rs=$conn->query($sql); //3.关闭连接 closeDb($conn);
$dbConf=include 'conf.php'; //打开 $conn=new mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']); if(!$conn){ die('数据库打开失败'); } //执行增删改查 /*************数据查询***************************/ $sql='SELECT t.`id1` from `t1` as t'; $rs=$conn->query($sql);//获取结果集 //通过fetch_assoc、fetch_array、fetch_row从结果集中获取数据 while ($tmp=$rs->fetch_assoc()) { print_r($tmp); } /*************数据删除***************************/ $sql='DELETE FROM `t1` WHERE `id1`=3'; $rs=$conn->query($sql);//获取结果集 print_r($rs);$conn->close();
Explique principalement le prétraitement de la programmation objet mysli. Quant au prétraitement orienté processus utilisant mysqli_prepare, je ne le présenterai pas
$dbConf=include 'conf.php'; //打开 $conn=new mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']); if(!$conn){ die('数据库打开失败'); } //执行增删改查 /*************数据查询***************************/ $sql='SELECT * from `t1` as t WHERE id2>?'; $stmt=$conn->prepare($sql); if(!$stmt){ die('sql语句有问题'); } //绑定参数 $id2=2; $stmt->bind_param('i',$id2);//不能写成bind_param('i',2) //执行 $stmt->execute(); //将结果绑定发到指定的参数上 $stmt->bind_result($id1, $id2); //获取结果 while ($tmp=$stmt->fetch()) { print_r('id1='.$id1.',id2='.$id2); echo '</br>'; } //关闭 $stmt->free_result();//释放结果 $stmt->close();//关闭预编译的指令. $conn->close();//关闭连接
$dbConf=include 'conf.php'; //打开 $pdo=myPDO::getInstance($dbConf); /*************数据查询***************************/ $sql='SELECT t.`id1` from `t1` as t'; $rs=$pdo->query($sql); $data=$rs->fetchAll();//取出所有结果 print_r($data); /*************数据更新***************************/ $sql='UPDATE t1 SET t1.`id1`=11 WHERE t1.`id1`=1'; $rs=$pdo->query($sql); /** * 数据库pdo连接 */ class myPDO{ private static $pdo; private function __construct(){ //code } private function __clone(){ //code } /** * 获取实例化的PDO,单例模式 * @return PDO */ public static function getInstance($dbConf){ if(!(self::$pdo instanceof PDO)){ $dsn ="mysql:host=".$dbConf['host'].";port=".$dbConf['port'].";dbname=".$dbConf['dbName']."; charset=".$dbConf['charSet']; try { self::$pdo = new PDO($dsn,$dbConf['user'], $dbConf['password'], array(PDO::ATTR_PERSISTENT => true,PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); //保持长连接 self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); } catch (PDOException $e) { print "Error:".$e->getMessage()."<br/>"; die(); } } return self::$pdo; } }
pdo prend en charge le prétraitement, et il est recommandé d'utiliser le prétraitement pour empêcher l'injection SQL.
Ce qui précède est l'explication détaillée de PHP connectant les données MySQL via Mysqli et PDO. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !