php的SQL连接操作的方法

本文详细介绍了如何使用PHP与MySQL进行数据库连接与操作的基本方法,并提供了PDO方法的初始化与使用示例,包括数据库连接、设置字符集、选择数据库及安全注入防范等关键步骤。同时,通过对比常规方法与PDO方法,展示了PDO在防止SQL注入方面的优势。

初学php,于是一开始就在sql(具体点说是mysql)里受挫严重。于是这里记下一些方法。

首先是基本方法。基本方法现在我不用了,所以我就附一下hustoj中的部分吧

基本方法的数据库连接操作:

 1     if($OJ_SAE)    {//  for sae.sina.com.cn
 2         mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
 3         $DB_NAME=SAE_MYSQL_DB;
 4     }else{
 5         //for normal install
 6         if(!mysql_pconnect($DB_HOST,$DB_USER,$DB_PASS)) 
 7             die('Could not connect: ' . mysql_error());
 8     }
 9     // use db
10     mysql_query("set names utf8");
11     
12     if(!mysql_select_db($DB_NAME))
13         die('Can\'t use foo : ' . mysql_error());

 

顺带一提,我是通过阅读hustoj的代码入门的php,感谢hustoj这个开源项目。但是我依然想吐槽一下,hustoj的前台代码太烂了。。

这是使用PDO方法操作sql之前的初始化操作。(因为要在SAE上跑所以写了两个,现在需要在OpenShift跑所以改了一下,,附新的)

1     //db init
2     if ($ON_SAE) {
3         $pdo = new PDO('mysql:host='.SAE_MYSQL_HOST_M.';port='.SAE_MYSQL_PORT.';dbname='.SAE_MYSQL_DB, SAE_MYSQL_USER, SAE_MYSQL_PASS);
4         $pdo->query("set names utf8;");
5     } else {
6         $pdo = new PDO("mysql:host=localhost;dbname=test","root","root");
7         $pdo->query("set names utf8;");
8     }
 1 <?php
 2 // From BLumiaOJ, include/setting_db.php
 3 // DB Connection
 4     switch ($ENV_CASE) {
 5     case "SAE":
 6         define('DB_HOST',SAE_MYSQL_HOST_M);
 7         define('DB_PORT',SAE_MYSQL_PORT); 
 8         define('DB_USER',SAE_MYSQL_USER);
 9         define('DB_PASS',SAE_MYSQL_PASS);
10         define('DB_NAME',SAE_MYSQL_DB);
11         break;
12     case "OPEN_SHIFT":
13         define('DB_HOST',getenv('OPENSHIFT_MYSQL_DB_HOST'));
14         define('DB_PORT',getenv('OPENSHIFT_MYSQL_DB_PORT')); 
15         define('DB_USER',getenv('OPENSHIFT_MYSQL_DB_USERNAME'));
16         define('DB_PASS',getenv('OPENSHIFT_MYSQL_DB_PASSWORD'));
17         define('DB_NAME',getenv('OPENSHIFT_GEAR_NAME'));
18         break;
19     case "STD_MYSQL":
20         define('DB_HOST',$SQL_DB_HOST);
21         define('DB_PORT',$SQL_DB_PORT); 
22         define('DB_USER',$SQL_DB_USER);
23         define('DB_PASS',$SQL_DB_PASS);
24         define('DB_NAME',$SQL_DB_NAME);
25         break;
26     }
27 
28     $dsn = 'mysql:dbname='.DB_NAME.';host='.DB_HOST.';port='.DB_PORT;
29     $pdo = new PDO($dsn, DB_USER, DB_PASS);
30     $pdo->query("set names utf8;");
31 ?>

 

PDO的好处在于防注入的东西。但是也需要一些特别的方法,下面会提及,接下来是操作数据库的例子。

常规方法(依然摘自hustoj的部分代码):

1     $sql="SELECT * FROM `mail` WHERE `mail_id`=".$vid." and to_user='".$_SESSION['user_id']."'";
2     $result=mysql_query($sql);
3     $row=mysql_fetch_object($result);

处理得到的结果的方式很多样,根据需求实现就是了,这里不再阐述。

同样的部分,换做PDO写法则为:

1     $sql=$pdo->prepare("SELECT * FROM `tb_mail` WHERE `mail_id`=".$vid." and to_user='".$_SESSION['UID']."'");
2     $sql->execute();
3     $result=$sql->fetchAll();//$result[0]['content']

PDO取得的结果的处理方式也很多样,根据需要实现即可。

对于不同的需求,可以使用pdo处理的方式也不同。选择性使用fetch和fetchAll为好。fetch一般处理返回结果只有一行的比较方便,而fetchAll则处理多行的。另附一些别的参考代码(来自这里):

	$sql = "SELECT * FROM wp_posts  ";
	$query = $pdo->query($sql);
	foreach($query as $rs)
	{
		print_r($rs);
	}

	$sql = "SELECT * FROM wp_posts  ";
	$query = $pdo->query($sql);
	$result = $query->fetch();
	foreach($query as $rs)
	{
		print_r($rs);
	}

	$sql = "SELECT * FROM wp_posts  ";
	$query = $pdo->query($sql);
	$result = $query->fetchAll();
	print_r($result);

 

此外,PDO的好处在于某些时候可以更方便的防止注入等使得数据库接入更安全,方法类似下面这样:


上图是常规做法。

这个是应该改为的做法。

数据库的php接入和操作大致如此,如上仅供参考。如果有新科技的话我会补充进来,如果有错误还请评论指正。


 

转载于:https://www.cnblogs.com/blumia/p/php_mysql_connection.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值