php的SQL连接操作的方法
初学php,于是一开始就在sql(具体点说是mysql)里受挫严重。于是这里记下一些方法。
首先是基本方法。基本方法现在我不用了,所以我就附一下hustoj中的部分吧
基本方法的数据库连接操作:
if($OJ_SAE) {// for sae.sina.com.cn
mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
$DB_NAME=SAE_MYSQL_DB;
}else{
//for normal install
if(!mysql_pconnect($DB_HOST,$DB_USER,$DB_PASS))
die('Could not connect: ' . mysql_error());
}
// use db
mysql_query("set names utf8"); if(!mysql_select_db($DB_NAME))
die('Can\'t use foo : ' . mysql_error());
顺带一提,我是通过阅读hustoj的代码入门的php,感谢hustoj这个开源项目。但是我依然想吐槽一下,hustoj的前台代码太烂了。。
这是使用PDO方法操作sql之前的初始化操作。(因为要在SAE上跑所以写了两个,现在需要在OpenShift跑所以改了一下,,附新的)
//db init
if ($ON_SAE) {
$pdo = new PDO('mysql:host='.SAE_MYSQL_HOST_M.';port='.SAE_MYSQL_PORT.';dbname='.SAE_MYSQL_DB, SAE_MYSQL_USER, SAE_MYSQL_PASS);
$pdo->query("set names utf8;");
} else {
$pdo = new PDO("mysql:host=localhost;dbname=test","root","root");
$pdo->query("set names utf8;");
}
<?php
// From BLumiaOJ, include/setting_db.php
// DB Connection
switch ($ENV_CASE) {
case "SAE":
define('DB_HOST',SAE_MYSQL_HOST_M);
define('DB_PORT',SAE_MYSQL_PORT);
define('DB_USER',SAE_MYSQL_USER);
define('DB_PASS',SAE_MYSQL_PASS);
define('DB_NAME',SAE_MYSQL_DB);
break;
case "OPEN_SHIFT":
define('DB_HOST',getenv('OPENSHIFT_MYSQL_DB_HOST'));
define('DB_PORT',getenv('OPENSHIFT_MYSQL_DB_PORT'));
define('DB_USER',getenv('OPENSHIFT_MYSQL_DB_USERNAME'));
define('DB_PASS',getenv('OPENSHIFT_MYSQL_DB_PASSWORD'));
define('DB_NAME',getenv('OPENSHIFT_GEAR_NAME'));
break;
case "STD_MYSQL":
define('DB_HOST',$SQL_DB_HOST);
define('DB_PORT',$SQL_DB_PORT);
define('DB_USER',$SQL_DB_USER);
define('DB_PASS',$SQL_DB_PASS);
define('DB_NAME',$SQL_DB_NAME);
break;
} $dsn = 'mysql:dbname='.DB_NAME.';host='.DB_HOST.';port='.DB_PORT;
$pdo = new PDO($dsn, DB_USER, DB_PASS);
$pdo->query("set names utf8;");
?>
PDO的好处在于防注入的东西。但是也需要一些特别的方法,下面会提及,接下来是操作数据库的例子。
常规方法(依然摘自hustoj的部分代码):
$sql="SELECT * FROM `mail` WHERE `mail_id`=".$vid." and to_user='".$_SESSION['user_id']."'";
$result=mysql_query($sql);
$row=mysql_fetch_object($result);
处理得到的结果的方式很多样,根据需求实现就是了,这里不再阐述。
同样的部分,换做PDO写法则为:
$sql=$pdo->prepare("SELECT * FROM `tb_mail` WHERE `mail_id`=".$vid." and to_user='".$_SESSION['UID']."'");
$sql->execute();
$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接入和操作大致如此,如上仅供参考。如果有新科技的话我会补充进来,如果有错误还请评论指正。
php的SQL连接操作的方法的更多相关文章
- (修改)oracle11g监听多台主机配置,用pl/sql连接操作多个数据库详解
很多朋友在开发项目中并不是每个人用一个数据库,而是有单独的一台主机作为开发的数据库服务器,这样,就需要我们的开发人员去连接它. 首先是进入oracle的 Net Mananger:
- sql连接字符串的方法
----乌龟代码---合并列值 --********************************************************************************** ...
- SQL连接操作
一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1 ...
- SQL 连接操作 及 查询分析
- 在 SQL Server 中查找活动的 SQL 连接
在SQL Server中有几种方法可以找到活动的 SQL 连接.让我们看看一些使用 T-SQL 查询的简单快捷的方法. SP_WHO SP_WHO 是 SQL Server 内置的系统存储过程, 其他 ...
- SQL 2005 中查询或执行另外的数据库操作的方法
原文:SQL 2005 中查询或执行另外的数据库操作的方法 摘要: 如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据, ...
- SQL 经典回顾:JOIN 表连接操作不完全指南
2017-02-23 小峰 ITPUB 点击上方“蓝字”可以关注我们哦  |转载自:码农网 |原文链接:www.codeceo.com/article/sql-join-guide.html ...
- 把两个DataTable连接起来,相当于Sql的Inner Join方法
在C#中把两个DataTable连接起来,相当于Sql的Inner Join方法 作者:浪漫十一狼在下面的例子中实现了3个Join方法,其目的是把两个DataTable连接起来,相当于Sql的Inne ...
- 远程连接sql server 数据库的方法
今天找了半天,终于解决了如何从本地连接到远程sql server服务器的方法. 1.首先确保打开远程服务器的sql server配置管理器,确保TCP/IP协议开启 2.WebConfig的连接字符格 ...
随机推荐
- Javascript进阶篇——( 事件响应)笔记整理
什么是事件 JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 鼠标单击事件(on ...
- ios 75个工具
如果你去到一位熟练的木匠的工作室,你总是能发现他/她有一堆工具来完成不同的任务. 软件开发同样如此.你可以从软件开发者如何使用工具中看出他水准如何.有经验的开发者精于使用工具.对你目前所使用的工具 ...
- javascript 事件代理及应用
事件代理又叫事件委托在前端发开中实际是非常有用的,说事件代理之前我们先说说事件绑定 <p onclick="test()" ></p> function t ...
- Path Sum,Path Sum II
Path Sum Total Accepted: 81706 Total Submissions: 269391 Difficulty: Easy Given a binary tree and a ...
- CDZSC_2015寒假新人(1)——基础 c
Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the wareho ...
- 深入理解JavaWeb技术内幕(一)
最近在看许令波的<深入理解JavaWeb技术内幕>.整理了一些笔记.想做一个系列,这篇是系列的第一篇,讲Web请求. B/S架构 最常见的架构方式. 优点: 1.客户端使用统一(此处的统一 ...
- mysql存储过程调试方法
有如下一个存储过程 ), i_length ),OUT o_result INT) BEGIN SET @a= NULL; SET @b= NULL; SELECT id INTO @a FROM t ...
- wampserver 2.2装好后80端口未被占用,却打不开localhost
在windows server 2003中装好wampserver2.2后打不开localhost,点击服务全部启动(颜色是橙色)也是打不开,我解决的原因是:安装mysql中sevice中的安装测试服 ...
- Python成长之路第二篇(2)_列表元组内置函数用法
列表元组内置函数用法list 元组的用法和列表相似就不一一介绍了 1)def append(self, p_object):将值添加到列表的最后 # real signature unknown; r ...
- Red and Black(水)
Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...