PHPPDO运行总结

PHPPDO运行总结
PDO是0x01:测试是否成功安装

运行下面的代码,如果提示参数错误的,它表明,PDO已安装。如果对象不存在,修改PHP配置文件php.ini文件,取消前面的php_pdo_yourssqlserverhere.extis注释。

复制代码代码如下所示:

为测试=新的PDO();
0x02:连接数据库

运行Apache服务器,确保服务器运行和PDO的安装是成功的,所以让我们连接到下面的数据库。

复制代码代码如下所示:

$ DSN = 'mysql:北京演示;主机= localhost端口= 3306;

用户名为'root美元;

密码= 'password_here美元;

{试

DB =新的PDO(美元美元美元美元的DSN,用户名,密码);

} catch(PDOException,e){

死(没有连接数据库:)

'。(e);

}
0x03:基本查询

在PDO使用查询和执行两个方法可以查询数据库非常简单。如果你想获得查询结果执行的行数是非常好的,所以它是非常有用的SELECT查询语句。

复制代码代码如下所示:

语句= < SQL

*选择

从'食物'

健康的地方= 0

SQL;
食物= $ $ >查询($语句);
If the above query is correct, $foods is now a PDO Statement object. 我们可以得到我们需要的结果以及我们从这个对象查询的结果集。

寄存器:行你的号码

如果你使用的是MySQL数据库,PDO语句包含一个得到的结果集的行数,行数的方法,如下面的代码所示:

复制代码代码如下所示:

echo $食品->行数;
0x05:结果集的遍历

PDO的语句可以遍历使用市宥泰声明,如下面的代码所示:

复制代码代码如下所示:

foreach($食品-> fetchall()达食品){

echo $食品{ 'name' }。

';

}
PDO还支持读取方法,它只返回第一个结果。

0x06:由用户输入一个特殊字符

PDO提供了一种方法,称为报价,使一个特殊的字符是从输入字符串中的引号的地方了。

复制代码代码如下所示:

$输入=这是's'a''pretty dange'rous str'ing
使用报价方法后:

复制代码代码如下所示:

为数据库->报价(美元输入):这是 'pretty危险 北京的'rous STR
0x07:exec()

PDO可以使用exec()方法来实现更新、删除和插入操作,并执行它返回受影响的行数后:

复制代码代码如下所示:

语句= < SQL

删去'食物'

健康的地方= 1;

SQL;

回声$ DB >执行($语句);
0x08:预处理语句

尽管PHP中仍然广泛使用和支持了执行方法和查询,PHP官方网络要求人们用预处理语句替换它们。为什么主要原因是:它更安全,预处理语句不直接在实际查询中插入参数,避免了许多潜在的SQL注入。

然而,由于某些原因,其实并没有真正使用PDO预处理。它模拟了预处理方式,在向SQL服务器传输语句之前将参数数据插入到语句中,这使得一些系统容易受到SQL注入。

如果你的SQL Server不支持预处理,我们可以很容易地得到一个参考解决这个问题在PDO初始化如下:

复制代码代码如下所示:

为数据库-> setAttribute(PDO::attr_emulate_prepares,假);
下面是我们的第一个预处理语句:

复制代码代码如下所示:

声明=美元美元DB ->准备('select *食品,`名字` =和`健康` =);

美元美元->准备statement2 =分贝('select *食品,`名字` =:名字和`健康` =:健康);
如上面的代码所示,有创建参数的方法,命名和匿名(不在一个语句中),然后你可以使用bindValue挖掘你的输入:

复制代码代码如下所示:

$声明-> bindValue(1,‘蛋糕');

$statement->bindValue (2, true);

$ statement2 -> bindValue(':名字,'pie);

$ statement2 -> bindValue(':健康的、虚假的);
注意,你必须包括一个冒号(:)使用命名parameter.pdo时也有一个可以绑定值的参考,这是bindparam方法,找到相应的价值只有当执行语句。

现在唯一要做的就是执行我们的声明:

复制代码代码如下所示:

语句>执行();

$ statement2 ->执行();
我们得到的结果是:

$=语句>获取();

馅饼=美元美元->取statement2();
为了避免使用bindValue唯一的代码片段,你可以使用一个数组来给execute方法作为一个参数,这样:

复制代码代码如下所示:

$声明->执行(阵列(‘蛋糕'= 1,真实= 2));

美元->执行statement2(阵列('pie:名字= > ',':健康= >假));
0x09:交易

一个事务是执行一个查询,但它不保存对数据库。这样做的好处是,如果你执行4个相互依存的INSERT语句,如果没有,你可以滚回来,这样其他的数据不能插入到数据库中,这样,可以依靠对方的领域可以正确插入。你需要确保你使用数据库引擎由事务支持。

预料:公开交易

你可以简单地使用BeginTransaction()打开一个交易方法:

复制代码代码如下所示:

为数据库->开始();

($ DB ->交易); / /真的!
然后,您可以继续执行数据库操作语句,并在结束时提交事务:

复制代码代码如下所示:

$ < >提交();
还有一个回滚()方法类似于MySQLi,但它不会回滚所有类型(例如,在MySQL中使用下拉表)。这种方法不太可靠。我建议我们尽量避免使用这种方法。

0x11其他有用的选项

您可以考虑以下几种选项:当对象初始化时,可以将其用作第四参数输入。

复制代码代码如下所示:

$选项=阵列($选项= $ value1,$ { .. });

DB =新的PDO(美元美元美元美元的DSN,用户名,密码,为选项);
PDO::attr_default_fetch_mode

你可以选择什么类型的结果集将返回的PDO,如PDO::fetch_assoc,这将允许你使用$结果{ 'column_name}或PDO::fetch_obj,它将返回一个匿名对象,所以你可以使用$结果-> column_name。

您也可以将结果放入特定的类(模型)中,并且可以为每个单独的查询设置一个读取模式,如下所示。

复制代码代码如下所示:

查询=美元美元DB ->查询('select * `食品`);

食物=美元美元查询-> fetchall(PDO::fetch_class,'food);
PDO::attr_errmode

我们已经解释了这一个,但人们喜欢使用需要使用PDO::errmode_exception.if你想丢掉不管出于什么原因,PHP警告使用PDO::errmode_warning。

PDO::attr_timeout

当您急于加载时间时,可以使用此属性指定查询的超时时间。单位是秒。注意,如果你超过你设定的时间,默认会把e_warning例外,除非PDO::attr_errmode改。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部