标签: pdo

PDO准备好的语句是否足以阻止SQL注入?

假设我有这样的代码:

$dbh = new PDO("blahblah");

$stmt = $dbh->prepare('SELECT * FROM users where username = :username');
$stmt->execute( array(':username' => $_REQUEST['username']) );
Run Code Online (Sandbox Code Playgroud)

PDO文件说:

准备语句的参数不需要引用; 司机为你处理.

这真的是我需要做的就是避免SQL注入吗?这真的很容易吗?

如果它有所作为,你可以假设MySQL.另外,我真的只是对使用针对SQL注入的预处理语句感到好奇.在这种情况下,我不关心XSS或其他可能的漏洞.

php security pdo sql-injection

631
推荐指数
6
解决办法
20万
查看次数

我可以将数组绑定到IN()条件吗?

我很想知道是否可以使用PDO将值数组绑定到占位符.这里的用例试图传递一个值数组以用于IN()条件.

我希望能够做到这样的事情:

<?php
$ids=array(1,2,3,7,8,9);
$db = new PDO(...);
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN(:an_array)'
);
$stmt->bindParam('an_array',$ids);
$stmt->execute();
?>
Run Code Online (Sandbox Code Playgroud)

并让PDO绑定并引用数组中的所有值.

目前我正在做:

<?php
$ids = array(1,2,3,7,8,9);
$db = new PDO(...);
foreach($ids as &$val)
    $val=$db->quote($val); //iterate through array and quote
$in = implode(',',$ids); //create comma separated list
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN('.$in.')'
);
$stmt->execute();
?>
Run Code Online (Sandbox Code Playgroud)

这当然能完成这项工作,但只是想知道是否有一个内置的解决方案我缺席了?

php arrays pdo prepared-statement where-in

549
推荐指数
17
解决办法
20万
查看次数


mysqli或PDO - 有什么优缺点?

在我们的位置,我们将使用mysqli和PDO分为准备语句和事务支持之类的东西.有些项目使用一个,另一个项目.我们很难有可能转移到另一个RDBMS.

我更喜欢PDO,因为它允许为预准备语句提供命名参数,据我所知,mysqli没有.

在我们整合项目时只使用一种方法,是否还有其他优点和缺点选择其中一种作为标准?

php mysql mysqli pdo database-abstraction

342
推荐指数
10
解决办法
13万
查看次数

PDOException SQLSTATE [HY000] [2002]没有这样的文件或目录

我相信我已成功将我的(非常基本的)站点部署到fortrabbit,但是一旦我连接到SSH运行一些命令(例如php artisan migratephp artisan db:seed),我收到一条错误消息:

[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
Run Code Online (Sandbox Code Playgroud)

在某些时候,迁移必须有效,因为我的桌子在那里 - 但这并不能解释为什么它现在不适合我.

php mysql pdo laravel

280
推荐指数
16
解决办法
42万
查看次数

PDOException"找不到驱动程序"

我刚刚用Apache,MySQL和PHP安装了Debian Lenny,我收到了一个PDOException could not find driver.

这是它所指的特定代码行:

$dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS)

DB_HOST,DB_NAME,DB_USER,和DB_PASS是我所定义的常量.它在生产服务器(以及我以前的Ubuntu Server设置)上运行良好.

这与我的PHP安装有关吗?

搜索互联网没有帮助,我得到的只是专家交流和示例,但没有解决方案.

php mysql lamp pdo

274
推荐指数
13
解决办法
75万
查看次数

PHP PDO语句可以接受表名或列名作为参数吗?

为什么我不能将表名传递给准备好的PDO语句?

$stmt = $dbh->prepare('SELECT * FROM :table WHERE 1');
if ($stmt->execute(array(':table' => 'users'))) {
    var_dump($stmt->fetchAll());
}
Run Code Online (Sandbox Code Playgroud)

是否有另一种安全的方法将表名插入SQL查询?安全我的意思是我不想这样做

$sql = "SELECT * FROM $table WHERE 1"
Run Code Online (Sandbox Code Playgroud)

php pdo

232
推荐指数
5
解决办法
7万
查看次数

使用PDO进行行计数

围绕着许多相互矛盾的陈述.在PHP中使用PDO进行行计数的最佳方法是什么?在使用PDO之前,我只是简单地使用了mysql_num_rows.

fetchAll 是我不想要的东西,因为我有时可能会处理大型数据集,所以对我的使用不利.

你有什么建议吗?

php mysql pdo

184
推荐指数
8
解决办法
34万
查看次数

PHP PDO:charset,设置名称?

我以前在我的普通mysql_*连接中有这个:

mysql_set_charset("utf8",$link);
mysql_query("SET NAMES 'UTF8'");
Run Code Online (Sandbox Code Playgroud)

我是否需要它用于PDO?我应该在哪里买到它?

$connect = new PDO("mysql:host=$host;dbname=$db", $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

181
推荐指数
4
解决办法
23万
查看次数

在PDO中使用持久连接有什么缺点

在PDO中,可以使用该PDO::ATTR_PERSISTENT属性使连接持久化.根据php手册 -

持久连接不会在脚本末尾关闭,而是在另一个脚本使用相同凭据请求连接时进行高速缓存和重新使用.持久连接缓存允许您避免每次脚本需要与数据库通信时建立新连接的开销,从而产生更快的Web应用程序.

本手册还建议在使用PDO ODBC驱动程序时不要使用持久连接,因为它可能会妨碍ODBC连接池过程.

显然,除了在最后一种情况下,在PDO中使用持久连接似乎没有任何缺点.但是,我想知道使用这种机制是否存在任何其他缺点,即这种机制会导致性能下降或类似的情况.

php pdo

174
推荐指数
5
解决办法
6万
查看次数