当前位置:   article > 正文

php7实践指南-ch15MySQL数据库的使用PHP操作MySQL数据库_php数据录入mysql,不执行check data 的if语句

php数据录入mysql,不执行check data 的if语句

PHP与MySQL是在编程中经常搭配使用的。在一般的网站架构模式中经常采用LAMP的形式,即Linux、Apache、MySQL、PHP,包括近年来兴起的LNMP, N即代表将其中的Apache服务器换成Nginx服务器。

在PHP 5.x的版本中支持三种PHP扩展方式连接数据库:MySQL、MySQLi和PDO。在PHP 7中去掉了纯面向过程的MySQL连接数据库的方式。下面分别介绍MySQLi和PDO连接操作数据库的内容。

15.7.1 MySQLi连接操作数据库

MySQLi支持面向过程和面向对象两种风格的操作数据库的形式。操作数据库分为3个步骤。

(1)连接数据库和选择数据库。

(2)执行SQL语句。

(3)关闭结果集。

1.连接和选择数据库

(1)MySQLi面向过程风格的连接数据库语法如下:

function mysqli_connect ($host = '', $user = '', $password = '', $database = '', $port = '', $socket = '') false|mysqli

(2)MySQLi对象化风格的连接语法如下:

public function mysqli::connect ($host, $user, $password, $database, $port, $socket) void

2.执行SQL语句

通过MySQLi向表test_table中插入一行数据,代码如下:

  1. <?php
  2. $db=new mysqli('localhost','root','123456','db_test');
  3. $sql="insert into test_table(title,author,content,submit_time,click) values (?,?,?,?,?);"; //预设的SQL语句,表示需要绑定的参数
  4. $title='titlemysqli';
  5. $author='authormysqli';
  6. $content='contentmysqli';
  7. $submit_time='2020-01-25 10:00:00';
  8. $click=10011;
  9. $stmt=$db->prepare($sql);//预执行SQL语句
  10. //绑定参数到SQL语句,注意第一个参数的字符数量要和后面的参数数量保持一致
  11. $stmt->bind_param("sssss",$title,$author,$content,$submit_time,$click);
  12. if($stmt->execute()){
  13. echo "insert successfully";
  14. }
  15. $db->close();

保存以上文件为insert.php,运行文件则会向数据库中插入数据。

使用MySQLi更新数据的示例代码如下:

  1. <?php
  2. $db=new mysqli('localhost','root','123456','db_test');
  3. $sql="update test_table set title=? where id=1001";
  4. $title='mysqltitle';
  5. $stmt=$db->prepare($sql);
  6. $stmt->bind_param("s",$title);
  7. if($stmt->execute()){
  8. echo "update successfully";
  9. }
  10. $db->close();

只是对insert.php中的代码稍做改动便可实现更新数据表的操作,保存以上代码为update.php并运行便可更新数据表中的记录行。

使用MySQLi删除表中的数据也很简单,示例代码如下:

  1. <?php
  2. $db=new mysqli('localhost','root','123456','db_test');
  3. $sql="delete from test_table where id=?";
  4. $id = 1007;
  5. $stmt=$db->prepare($sql);
  6. $stmt->bind_param("s",$id);
  7. if($stmt->execute()){
  8. echo "delete successfully";
  9. }
  10. $db->close();

保存以上文件为delete.php并运行,将会删除表中id为1007的记录行。

对于查询数据表中的内容,MySQLi也提供了多种查询方式。查询数据的示例代码如下:

  1. <?php
  2. $db=new mysqli('localhost','root','12345678','db_test');
  3. $sql="select * from test_table where click> 2";
  4. $res=$db->query($sql);
  5. echo "<pre>";
  6. while($arr=$res->fetch_assoc()){
  7. var_dump($arr);
  8. }
  9. $res->free();//释放查询结果
  10. $db->close();
  1. 保存以上代码为fetch_assoc.php,运行文件,在浏览器中查看输出结果
  2. array(6) {
  3. ["id"]=>
  4. string(4) "1001"
  5. ["title"]=>
  6. string(10) "mysqltitle"
  7. ["author"]=>
  8. string(12) "authormysqli"
  9. ["content"]=>
  10. string(13) "contentmysqli"
  11. ["submit_time"]=>
  12. string(19) "2020-01-25 10:00:00"
  13. ["click"]=>
  14. string(5) "10011"
  15. }
  16. array(6) {
  17. ["id"]=>
  18. string(4) "1002"
  19. ["title"]=>
  20. string(11) "titlemysqli"
  21. ["author"]=>
  22. string(12) "authormysqli"
  23. ["content"]=>
  24. string(13) "contentmysqli"
  25. ["submit_time"]=>
  26. string(19) "2020-01-25 10:00:00"
  27. ["click"]=>
  28. string(5) "10011"
  29. }从结果中可知,查询结果数组中的索引为表中字段名称,值为表中字段对应的值。这是因为我们使用了fetch_assoc方式进行查询。如果将代码中的$res->fetch_assoc()换成$res->fetch_array(),那么查询到的结果数组中将会包含索引数组和关联数组,其中索引数组的值为表中字段的值。如果换成$res->row(),就会只得到索引数组。读者可自行编写代码尝试。

上面介绍了MySQLi连接操作数据库的内容,并且只是介绍了MySQLi面向对象风格的实现方式。我们应该习惯这种方式,面向对象是编程中应该具备的一种思想。MySQLi也支持面向过程化的操作,但是不建议大家在实际应用中采用这种方式,这里也不进行详细介绍了,读者可查询相关资料进行实践。

15.7.2 PDO连接操作数据库

PDO扩展为PHP访问数据库定义了一个轻量级、一致性的接口。它提供了一个数据访问抽象层,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。

1. PDO连接数据库

使用PDO创建一个数据库连接语法如下:

其中,数据源名称或叫作DSN包含了请求连接到数据库的信息。连接成功就返回一个PDO对象,如果试图连接到请求的数据库失败就抛出一个PDO异常。

使用PDO连接数据库的示例代码如下:

  1. <?php
  2. /* Connect to an ODBC database using driver invocation*/
  3. $dsn='mysql:dbname=db_test;host=127.0.0.1';
  4. $user='root';
  5. $password='123456';
  6. try{
  7. $dbh= new PDO($dsn,$user,$password);
  8. }catch (PDOException $e){
  9. echo 'Connection failed:'.$e->getMessage();
  10. }

2.执行SQL语句

向test_table中插入数据的示例代码如下:

  1. <?php
  2. /* Connect to an ODBC database using driver invocation*/
  3. $dsn='mysql:dbname=db_test;host=127.0.0.1';
  4. $user='root';
  5. $password='123456';
  6. try{
  7. $db= new PDO($dsn,$user,$password);
  8. }catch (PDOException $e){
  9. echo 'Connection failed:'.$e->getMessage();
  10. }
  11. $sql1="SET NAMES utf8";
  12. $db->exec($sql1);
  13. $author=['陈小龙','陈大龙','李小龙','李大龙','张小龙','张大龙'];
  14. for($i=0;$i<100;$i++){
  15. $sql="insert into test_table (title,author,content,submit_time,click)
  16. values ('title".$i."','".$author[rand(0,5)]. "','content".$i."','".date('Y-m-d H:i:s')."',".rand(100,1000).")";
  17. //echo $sql;
  18. if($db->exec($sql)){ //执行语句
  19. echo "success<br/>";
  20. }else{
  21. var_dump($db->errorInfo());//错误信息
  22. exit();
  23. }
  24. }

将以上代码保存为insert.php并在浏览器中运行,将会向表test_table中插入一百行记录。

使用PDO连接数据库更新表中的内容和MySQLi差不多,也很简单。下面的代码用于演示如何修改数据表中的内容:

  1. <?php
  2. /* Connect to an ODBC database using driver invocation*/
  3. $dsn='mysql:dbname=db_test;host=127.0.0.1';
  4. $user='root';
  5. $password='123456';
  6. try{
  7. $db= new PDO($dsn,$user,$password);
  8. }catch (PDOException $e){
  9. echo 'Connection failed:'.$e->getMessage();
  10. }
  11. $sql1="SET NAMES utf8";
  12. $db->exec($sql1);
  13. $sql="update test_table set title='titlepdo' where id > 50";
  14. if($db->exec($sql)){
  15. echo "update sucessfully";
  16. }else{
  17. var_dump($db->errorInfo());
  18. exit();
  19. }
  20. $db->close();

保存以上代码为update.php文件并在浏览器中运行该文件,将会更新表中id大于50的记录行中的title字段值。

同样,使用PDO的方式删除表中的数据也主要是编写正确的SQL语句,和更新数据的形式基本一致,代码如下:

  1. <?php
  2. /* Connect to an ODBC database using driver invocation*/
  3. $dsn='mysql:dbname=db_test;host=127.0.0.1';
  4. $user='root';
  5. $password='admin123/';
  6. try{
  7. $db= new PDO($dsn,$user,$password);
  8. }catch (PDOException $e){
  9. echo 'Connection failed:'.$e->getMessage();
  10. }
  11. $sql1="SET NAMES utf8";
  12. $db->exec($sql1);
  13. //$sql="update test_table set title='titlepdo' where id > 50";
  14. $sql="delete from test_table where id>50";
  15. if($db->exec($sql)){
  16. echo "delete sucessfully";
  17. }else{
  18. var_dump($db->errorInfo());
  19. exit();
  20. }
  21. $db->close();

保存以上文件为delete.php并在浏览器中运行该文件,将会删除表中id值大于50的记录行。

使用PDO查询数据表,比如要查询test_table表中click字段值大于950的记录行,代码如下:

  1. <?php
  2. /* Connect to an ODBC database using driver invocation*/
  3. $dsn='mysql:dbname=db_test;host=127.0.0.1';
  4. $user='root';
  5. $password='admin123/';
  6. try{
  7. $db= new PDO($dsn,$user,$password);
  8. }catch (PDOException $e){
  9. echo 'Connection failed:'.$e->getMessage();
  10. }
  11. $sql1="SET NAMES utf8";
  12. $db->exec($sql1);
  13. $sql ="select content from test_table where click>950";
  14. echo "<pre>";
  15. $res=$db->prepare($sql); //预处理SQL语句
  16. $res->execute();
  17. $arr=$res->fetchAll(); //获取所有查询结果集
  18. var_dump($arr);
  19. $db->close();

保存以上代码为select.php并在浏览器中运行,结果如下所示

array(1) {
  [0]=>
  array(2) {
    ["content"]=>
    string(9) "content44"
    [0]=>
    string(9) "content44"
  }
}

图15-33 PDO查询结果

在select.php中的代码$res->fetchAll()除了使用fetchAll外还可使用fetch。fetch的语法如下:

其作用是从一个PDOStatement对象相关的结果集中获取下一行。fetch_style参数决定POD如何返回行。fetch_style的参数说明如表15-8所示。

下面的例子演示如何使用PDOStatement::fetch()获取查询结果:

  1. <?php
  2. /* Connect to an ODBC database using driver invocation*/
  3. $dsn='mysql:dbname=db_test;host=127.0.0.1';
  4. $user='root';
  5. $password='admin123/';
  6. try{
  7. $db= new PDO($dsn,$user,$password);
  8. }catch (PDOException $e){
  9. echo 'Connection failed:'.$e->getMessage();
  10. }
  11. $sql1="SET NAMES utf8";
  12. $db->exec($sql1);
  13. $sql ="select content from test_table where click>950";
  14. echo "<pre>";
  15. $res=$db->prepare($sql); //预处理SQL语句
  16. $res->execute();
  17. //while($arr=$res->fetch(PDO::FETCH_OBJ)){ //将查询结果以匿名对象形式返回
  18. // var_dump($arr);
  19. //}
  20. while($arr=$res->fetch(PDO::FETCH_ASSOC)){ //
  21. var_dump($arr);
  22. }
  23. $db->close();

使用以上代码查询到的结果如下所示。

array(1) {
  ["content"]=>
  string(9) "content44"
}

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号