phpMysql 深碍√TFBOYSˉ_ 2022-06-04 05:42 283阅读 0赞 一、 连接数据库 1. php7之前连接数据库 $link =mysql_connect(“数据库服务器地址”,”用户名”,”密码”); Mysql_query(“set names 网页文件编码名”);或者mysql_set_charset(“网页文件编码名”); Mysql_query(“use 数据库名”);或者mysql_select_db(“数据库名”); 2. php7可以使用面向对象和面向过程两种方法操作数据库,如下例: <?php //面向对象方式 $mysqli = newmysqli("localhost","root","123456","test1"); //面向对象的方式屏蔽了连接产生的错误,需要通过函数来判断 if(mysqli_connect_error()){ echomysqli_connect_error(); } //设置编码 $mysqli ->query("set names uft8");//或者$mysqli - > query("set names'uft8'"); //关闭连接 $mysqli -> close(); //面向过程方式的连接方式 $mysqli =mysqli_connect("localhost","root","123456","test1"); //判断是否连接陈功 if(!$mysqli){ echomysqli_connect_error(); } //关闭连接 mysqli_close($mysqli); ?> 二、 执行数据库操作语句 1. php7之前 $result =mysql_query(“select …”); //参数为sql语句 while( $rec =mysql_fetch_array($result)){ echo “<br />f1:” . $rec[‘f1’]; echo “||f2:” . $rec[‘f2’]; echo “||3:”. $rec[‘f3’]; } 2. php7 如下例子: <?php $mysqli = newmysqli("localhost","root","123456","test1"); //无结果集示例 $sql = "insert intotab1 (id,name) values (1,'haha')"; $result = $mysqli ->query($sql); //影响条数 echo "影响的条数:" . $mysqli -> affected_rows . "<br />"; //插入的id echo "插入的id:" . $mysqli -> insert_id; $mysqli -> close(); ?> 有结果集的例子。 <?php $mysqli = newmysqli("localhost","root","123456","test1"); //有结果集示例 $sql = "select * fromtab1"; $result = $mysqli ->query($sql); if($result === false){//执行失败 echo $mysqli->error; echo $mysqli->errno; } while($row = $result->fetch_assoc()){ echo $row['id'] .">>" . $row['name'] . "<br />"; } //也可以一次性获得所有数据 $data = $result->fetch_all(MYSQLI_ASSOC); echo "<br/>";print_r($data); $mysqli ->close(); ?> 三、 利用mysql相关函数以表格样式通用显示的程序 1. php7之前 <!DOCTYPE html> <html> <head> <title>数据表格</title> </head> <body> <?php $dbname = “php1”; If(!empty($_GET[‘db’])){ $dbname = $_GET[‘db’]; } $link =mysql_connect(“localhost”, “root”, “1234”); mysql_query(“set names utf8”); mysql_query(“use $dbname”); $sql = “select * fromtab1”; $sql = “select * fromtab2”; $sql = “desc tab_temp1”; $sql = “show databases”; $sql = “show tables”; $result =mysql_query($sql); if($result === false){ echo “执行失败” . mysql_error(); } else{ //$result就是“结果集”; echo $result; echo “<table border=’1’>”; $field_count =mysql_num_fields($result);//获得列数 echo “<tr>”; for($1 = 0; $i <$field_count; ++$i){ $field_name =mysql_field_name($result, $i); echo “<td>” . $field_name . “</td>”; } echo “</tr>”; while($rec =mysql_fetch_array($result)){ //* echo “<tr>”; //对这个结果集进行“列遍历” for($i = 0;$i <$field; ++$si){ $field_name= mysql_field_name($result, $i); echo“<td>” . $rec[$field_name] . “</td>”; } echo “</tr>”; //*/ } echo “</table>”; } ?> </body> </html> 2. php7 <?php $dbname ="test1"; if(!empty($_GET['db'])){ $dbname =$_GET['db']; } $mysqli = newmysqli("localhost","root","123456"); //有结果集示例 $mysqli->query("use $dbname"); $sql = "select * fromtab1"; $sql = "showtables"; //$sql = "showdatabases"; $result = $mysqli ->query($sql); if($result === false){//执行失败 echo $mysqli->error; echo $mysqli->errno; }else{ echo "执行成功,数据如下:"; echo "<table border='1'>"; //获得最近一次查询获得的列数 $field_count =$mysqli ->field_count; echo "<tr>"; for($i = 0; $i <$field_count; ++$i){ $field_name =$result ->fetch_field_direct($i) ->name; echo"<td>" . $field_name . "</td>"; } echo"</tr>"; while($rec = $result ->fetch_assoc()){ echo "<tr>"; for($i =0; $i< $field_count; ++$i){ $field_name= $result ->fetch_field_direct($i) ->name; echo "<td>" . $rec[$field_name] ."</td>"; } echo "</tr>"; } echo"</table>"; } $mysqli ->close(); ?> 四、 搭建phpmysadmin数据库管理系统 步骤: 1. 将phpmyadmin的站点文件放置在一个确定的位置,比如和php、apached等文件夹同目录下。 2. 配置apache的conf的extra的httpd\_vhost.conf文件,也就是给phpmyadmin配置一个站点 <VirtualHost *:80> ServerName www.phpmyadmin.com DocumentRoot "D:/php/amp/phpMyAdmin-4.7.6-all-languages" <Directory "D:/php/amp/phpMyAdmin-4.7.6-all-languages"> Options Indexes FollowSymLinks AllowOverride none Require all granted DirectoryIndex index.php </Directory> </VirtualHost> 3. 到windows的C:\\Windows\\System32\\drivers\\etc\\hosts文件中添加一条对应站点域名的解析信息。 127.0.0.1 www.phpmyadmin.com 4. 如果出现mb\_detect\_encoding()未定义的错误,原因是php的某个模块没有打开。 到php的文件夹中打开php.ini中打开如下模块: extension=php\_mbstring.dll 五、 使用存储过程和存储函数 以php7做例子。 调用存储函数 <?php $dbname ="test1"; if(!empty($_GET['db'])){ $dbname =$_GET['db']; } $mysqli = new mysqli("localhost","root","123456"); $mysqli->query("use $dbname"); $sql = "insert intotab_int(f1,f2,f3) values(null,2,getMax(1,2,3))"; $mysqli ->query($sql); ?> 调用存储过程 <?php $dbname ="test1"; if(!empty($_GET['db'])){ $dbname =$_GET['db']; } $mysqli = newmysqli("localhost","root","123456"); $mysqli->query("use $dbname"); $s2 = 3; $s3 = 4; $sql = "callpro2(2,$s2,$s3)"; $mysqli ->query($sql); ?> 六、 php7的mysql工具类 <?php class MysqlUtil{ private $host; private $port; private $username; private $password; private $database; private $names; private static $mysqli =null; //用于存储唯一的单例对象 private static $instance =null; static functionGetInstance($config){ if(!isset(mysqlUtil::$instance)){ self::$instance= new self($config); } returnself::$instance; } private function__construct($config){ $this ->host =!empty($config['host'])?($config['host']):"localhost"; $this ->port =!empty($config['port'])?($config['port']):"3306"; $this ->username= !empty($config['username'])?($config['username']):"root"; $this ->password= !empty($config['password'])?($config['password']):"123456"; $this ->database= !empty($config['database'])?($config['database']):"test1"; $this ->names =!empty($config['names'])?($config['names']):"utf8"; //var_dump(self::$mysqli); self::$mysqli = newmysqli("{$this ->host}", "{$this ->username}","{$this ->password}", "{$this ->database}", $this->port); //self::$mysqli->query("set names {$this ->names}"); $this->setCharset($this ->names); } functionsetDatabase($database){ //var_dump(self::$mysqli); self::$mysqli->query("use $database"); } functionsetCharset($charset){ self::$mysqli->query("set names $charset"); } function close(){ self::$mysqli->close(); } function exec($sql){ $result =self::$mysqli ->query($sql); if($result ===false){ //执行语句失败,处理失败的信息 echo"<p>sql语句执行失败,请参考如下信息:"; echo"<br />错误代号:" . mysqli_errno; echo"<br />错误语句:" . mysqli_error; die(); } return true; } //这个方法是为了执行一条返回一条结果的语句,可以返回一维数组 //数组的下标就是这个sql语句中取出的字段名 function GetOneRow($sql){ $result =self::$mysqli ->query($sql); if($result ===false){ //执行语句失败,处理失败的信息 echo"<p>sql语句执行失败,请参考如下信息:"; echo"<br />错误代号:" . mysqli_errno; echo"<br />错误语句:" . mysqli_error; die(); } $rec = $result->fetch_assoc(); return $rec; } //这个方法是为了执行一条返回多行数据的语句,它可以返回二维数组 function GetRows($sql){ $result =self::$mysqli ->query($sql); if($result ===false){ //执行语句失败,处理失败的信息 echo"<p>sql语句执行失败,请参考如下信息:"; echo"<br />错误代号:" . mysqli_errno; echo"<br />错误语句:" . mysqli_error; die(); } //如果没有出错,则开始处理数据,以返回数组,此时$result是一个结果集 $arr = array(); while($rec = $result->fetch_assoc()){ $arr[] =$rec; } return $arr; } //执行一条返回一个数据的语句,可以返回一个直接值 //类似,select count(*) as c from user_list; function GetOneData($sql){ $result =self::$mysqli ->query($sql); if($result ===false){ //执行语句失败,处理失败的信息 echo"<p>sql语句执行失败,请参考如下信息:"; echo"<br />错误代号:" . mysqli_errno; echo"<br />错误语句:" . mysqli_error; die(); } $rec = $result->fetch_row(); $data = $rec[0]; return $data; } } ?> 七、 PDO Pdo是一个实用的数据操作工具类。使用pdo之前,需要在php.ini中打开php\_pdo\_mysql.dll。 1. 使用pdo连接mysql 数据库 <?php $dsn = "mysql:host=localhost; port=3306; dbname=test1"; $opt = array(PDO::MYSQL_ATTR_INIT_COMMAND =>'set names utf8'); $pdo = new PDO($dsn, 'root', '123456', $opt); var_dump($pdo); ?> 2. pdo对象的使用 $result = $pdo->query(“返回结果集的sql语句”);//结果,成功,是一个pdo结果集对象;失败,false。 $result = $pdo->exec(“增删改sql语句”);//结果,成功,true;失败,false。 $pdo = null;//销毁该对象。 $pdo->lastInsertId();//获取最后插入数据的id $pdo ->beginTransaction();//开启一个事务 $pdo ->commit();//提交一个事务 $pdo ->rollBack();//回滚一个事务 $pdo ->inTransaction();//判断当前是否在事务中 $pdo ->setAttribute(属性名, 属性值);//设置pdo对象的属性值,比如$pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION) 3. pdo的错误处理 默认,pdo采用静默模式处理错误,就是发生了错误后,并不提示,而只是返回false,需要在程序中判断是否为false,如果是false,再去主动获取错误信息,跟mysql一样。 比如: $sql = "sleect * from tabl"; $result = $pdo ->query($sql); if($result === false){ echo "发生错误"; echo "<br />错误代号:" . $pdo ->errorcode(); $arr = $pdo->errorinfo(); echo "<br />错误信息:" . $arr[2]; }else{ …… } 4. 异常模式 是为适应面向对象语法的处理错误的一种语法形式,如下所示: Try{ 可以执行可能出错的语句; 一旦发生错误,就会终止当前范围的后续代码执行; 而立即跳转到catch部分—处理错误。 }catch(Exception $e){ 一但发生错误,就进入这里,此时,并会生成一个错误对象; 该错误对象,就是系统类exception的一个实例,它包含了错误信息。 } 如果pdo要使用异常模式,就需要专门设置(默认是静默模式)。方法是: $pdo->setAttribute(PDO::ATTR\_ERRMODE, PDO::ERRMODE\_EXCEPTION); 设置后,异常模式的例子: try{ $sql = "insert table(null,13);"; $result = $pdo->exec($sql); echo "执行成功"; }catch(Exception $e){//$e就是错误对象 echo "发生错误"; echo "<br />错误代号:" . $e ->GetCode(); echo "<br />错误信息:" . $e ->GetMessage(); } 5. pdo的结果集对象 来自pdo对象执行返回数据的sql语句,得到的就是pdo的结果集对象。 $result = $pdo->query(“select ……”); 结果集对象的常用方法: $result = $pdo->query(“select ……”); $result->rowCount();//得到结果集的行数 $result ->columnCount();//得到结果集的列数 $result ->fetch(\[返回类型\]);//从结果集中取出一行数据 常用的返回类型有: PDO::FETCH\_ASSOC,表示关联数组; PDO::FETCH\_NUM,表示索引数组; PDO::FETCH\_BOTH,表示前二者都有,这是默认项; PDO::FETCH\_OBJ,表示对象; 比如: $sql = "select * from stu1"; $result = $pdo ->query($sql); $re1 = $result ->fetch(PDO::FETCH_ASSOC); $re2 = $result ->fetch(PDO::FETCH_NUM); $re3 = $result ->fetch(PDO::FETCH_BOTH); echo "<br />";print_r($re1); echo "<br />";print_r($re2); echo "<br />";print_r($re3); $result ->fetchAll([返回类型]);//一次性获取结果集中所有数据 $result ->fetchColumn([$i]);//获取结果集中的下一行第$i个字段的值,结果是一个标量数据,相当于自定义的GetOneData(); $result ->fetchObject();// $result ->errorCode();//结果集的错误代号 $result ->errorInfo();//结果集的错误信息(一个数组) $result ->closeCursor();//关闭结果集 6. pdo中的预处理语法 预处理语法就是为了执行多条结构类似的sql语句,而将该sql语句的形式进行预先处理(编译),该sql语句的形式中,含有未给定的数据项。然后,到正式执行的时候,只要给定相应的形式上的数据项,就可以更快速方便的执行。有两种形式。 语法1: $sql = “select \* from tab where id = ?”; //这里的?就是未给定的数据项,也可以是多个,通常称?为占位符 语法2: $sql = “select \* from tab where id = :v1 and name = :v2”; //这里的v1和v2就是未给定的数据项。通常称为命名参数。 使用步骤: 对含有预处理语法的sql语句进行预处理 $stmt = $pdo ->prepare($sql); 对上述预处理的结果对象($stat)的未赋值数据,进行赋值 $stmt ->bindValue(数据项1, 值1); $stmt ->bindValue(数据项2, 值2); …… 执行 $stmt ->execute(); 至此,这条sql语句正式完成。 占位符预处理的例子: <?php $dsn = "mysql:host=localhost; port=3306; dbname=test1"; $opt = array(PDO::MYSQL_ATTR_INIT_COMMAND =>'set names utf8'); $pdo = new PDO($dsn, 'root', '123456', $opt); $sql = "select * from stu1 where id = ? and username = ?"; $stmt = $pdo ->prepare($sql); $stmt ->bindValue(1,1); $stmt ->bindValue(2,'hah2'); $stmt ->execute(); $arr = $stmt ->fetch(PDO::FETCH_ASSOC); print_r($arr); ?> 可变参数预处理的例子: $sql = "select * from stu1 where id = :v1 and username =:v2"; $stmt = $pdo ->prepare($sql); $stmt ->bindValue(':v1',1); $stmt ->bindValue(':v2','hah2'); $stmt ->execute(); $arr = $stmt ->fetch(PDO::FETCH_ASSOC); print_r($arr); 也可以绑定变量,语法为: $stmt ->bindParam(命名参数或占位符号,变量,\[类型\]); //类型为可选项,包括:POD::PARAM\_BOOL, POD::PARAM\_NULL, POD::PARAM\_INT, POD::PARAM\_STR,POD::PARAM\_BLOB。PARAM\_INPUT\_OUTPUT,表示参数是可传出值的。 执行方式也有多种, 方式一,$stmt ->execute(); //前提是见面进行了绑定操作。 方式二,$stmt ->execute(array(“:val1” =>值1, “:val2” =>值2)); //对应命名参数形式。 方式三,$stmt ->execute(array(值1,值2)); //对应占位符形式。
相关 PHPMySQL防注入 如何使用安全的函数保护数据库 PHPMySQL防注入 如何使用安全的函数保护数据库 在进行PHP编程开发时,安全性一直是开发人员必须注意的问题,其中最重要的是防止SQL注入攻击。SQL注入攻击是指通过输入 雨点打透心脏的1/2处/ 2023年10月14日 11:16/ 0 赞/ 70 阅读
相关 phpMysql 一、 连接数据库 1. php7之前连接数据库 $link =mysql_connect(“数据库服务器地址”,”用户名”,”密码” 深碍√TFBOYSˉ_/ 2022年06月04日 05:42/ 0 赞/ 283 阅读
还没有评论,来说两句吧...