初学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连接操作的方法的更多相关文章

  1. (修改)oracle11g监听多台主机配置,用pl/sql连接操作多个数据库详解

    很多朋友在开发项目中并不是每个人用一个数据库,而是有单独的一台主机作为开发的数据库服务器,这样,就需要我们的开发人员去连接它. 首先是进入oracle的 Net  Mananger:

  2. sql连接字符串的方法

    ----乌龟代码---合并列值 --********************************************************************************** ...

  3. SQL连接操作

    一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1 ...

  4. SQL 连接操作 及 查询分析

  5. 在 SQL Server 中查找活动的 SQL 连接

    在SQL Server中有几种方法可以找到活动的 SQL 连接.让我们看看一些使用 T-SQL 查询的简单快捷的方法. SP_WHO SP_WHO 是 SQL Server 内置的系统存储过程, 其他 ...

  6. SQL 2005 中查询或执行另外的数据库操作的方法

    原文:SQL 2005 中查询或执行另外的数据库操作的方法 摘要: 如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据, ...

  7. SQL 经典回顾:JOIN 表连接操作不完全指南

    ​   2017-02-23 小峰 ITPUB 点击上方“蓝字”可以关注我们哦  |转载自:码农网 |原文链接:www.codeceo.com/article/sql-join-guide.html ...

  8. 把两个DataTable连接起来,相当于Sql的Inner Join方法

    在C#中把两个DataTable连接起来,相当于Sql的Inner Join方法 作者:浪漫十一狼在下面的例子中实现了3个Join方法,其目的是把两个DataTable连接起来,相当于Sql的Inne ...

  9. 远程连接sql server 数据库的方法

    今天找了半天,终于解决了如何从本地连接到远程sql server服务器的方法. 1.首先确保打开远程服务器的sql server配置管理器,确保TCP/IP协议开启 2.WebConfig的连接字符格 ...

随机推荐

  1. ios 文字图标

    如何使用自定义字体 在讲icon font之前,首先先来看看普通自定义字体是如何在ios中使用的,两个原理是一样的.这里以KaushanScript-Regular为例: Step 1: 导入字体文件 ...

  2. iOS数组、字典与json字符串的转换

    /*! * 将字典或者数组转化为JSON串 * * @param theData <#theData description#> * * @return <#return value ...

  3. SQL in Qt (一)

    Connecting to Databases To access a database with QSqlQuery or QSqlQueryModel, create and open one o ...

  4. 熟悉Git使用

    熟悉Git使用安装git后请修改提交用的用户名和邮箱命令:git config --global user.name "Your Name" git config --global ...

  5. js子页面获取父页面数据

    做页面预览的时候,数据没有存入数据库,但是要打开一个页面进行预览,询问众大婶,原来是这样来做. 1.父页面 <input type="text" id="name& ...

  6. oracle 使用基本问题

    Oracle服务端口号:1521Database Control URL : http://XXX:1158/em oracle主目录:X:\oracle\product\10.2.0\db_1/** ...

  7. Yii系列总结:yii 标签用法

    yii 常用标签:label标签.文本标签.error标签.textarea标签.hidden标签.password标签.url标签.radio标签.file标签.button标签.checkBox标 ...

  8. ubuntu中vim找不到配色方案blackboard

    在ubuntu下启动vim,提示找不到配色方案blackboard(或其他的), 如何挑选自己喜欢的配色方案呢?在/usr/share/vim/vim72/colors中,(这里根据自己的vim版本选 ...

  9. shell编程笔记(基本部分)

    1.变量 a.需要给变量赋值时,可以这么写: b.要取用一个变量的值,只需在变量名前面加一个$ ( 注意: 给变量赋值的时候,不能在"="两边留空格 ) c.然后执行 chmod ...

  10. 在Nginx上配置ThinkPHP项目

    前段时间用Apache配合TP开发了一个小型网站,也算是我使用TP的第一次实战.我习惯使用pathinfo模式,本地运行一切正常,然而部署到服务器上时,由于对方使用的是Nginx,默认是不支持Thin ...