Tag: Pdo

参考 – 有关PDO的常见问题

这是什么? 这是一个关于PHP数据对象的常见问题列表 为什么是这样? 由于PDO具有常规PHP用户所不了解的某些function,因此有关PDO中准备好的语句和error handling的问题相当频繁。 所以,这只是一个可以find它们的地方。 我应该在这里做什么? 如果您的问题已经与此清单密切相关,请在下面find您的问题,并将修复应用到您的代码。 简单回顾一下其他问题也是一个好主意,以便为其他常见问题做好准备。 列表 PDO查询失败,但我看不到任何错误。 如何从PDO获取错误消息? 我如何使用LIKE运算符使用预处理语句? 如何为IN()运算符创build一个准备好的语句? 我可以使用PDO准备语句绑定标识符(表或字段名称)或语法关键字吗? PDO准备语句在LIMIT语句中导致错误 也可以看看 参考 – 这个符号在PHP中意味着什么? 参考 – 这个错误在PHP中意味着什么? 参考 – 什么是variables作用域,哪些variables可以从哪里访问,什么是“未定义的variables”错误?

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

比方说,我有这样的代码: $dbh = new PDO("blahblah"); $stmt = $dbh->prepare('SELECT * FROM users where username = :username'); $stmt->execute( array(':username' => $_REQUEST['username']) ); PDO文件说: 准备报表的参数不需要引用; 司机为你处理。 这真的是我需要做的,以避免SQL注入? 这真的很简单吗? 如果它有所作为,你可以假设MySQL。 另外,我真的只对使用SQL注入准备好的语句感到好奇。 在这种情况下,我不关心XSS或其他可能的漏洞。

mysqli或PDO – 有什么优点和缺点?

就我们而言,我们将使用mysqli和PDO来分割准备好的语句和事务支持。 有些项目使用一个,另一个使用另一个。 我们转向另一个RDBMS几乎没有现实的可能性。 我更喜欢PDO,因为它允许准备好的语句的命名参数,并且据我所知,mysqli没有。 在我们巩固我们的项目使用一种方法时,是否有任何其他的利弊select作为一个标准?

我可以将数组绑定到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(); ?> 并让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 * […]

我的PDO声明不起作用

这是我的PHP sql语句,并且在var转储时返回false $password_md5 = md5($_GET['password']); $sql = $dbh->prepare('INSERT INTO users(full_name, e_mail, username, password, password_plain) VALUES (:fullname, :email, :username, :password, :password_plain)'); $result = $sql->execute(array( ':fullname' => $_GET['fullname'], ':email' => $_GET['email'], ':username' => $_GET['username'], ':password' => $password_md5, ':password_plain' => $_GET['password']));

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

为什么我不能将表名传递给准备好的PDO语句? $stmt = $dbh->prepare('SELECT * FROM :table WHERE 1'); if ($stmt->execute(array(':table' => 'users'))) { var_dump($stmt->fetchAll()); } 是否有另一种安全的方式来插入一个表名到SQL查询中? 安全我的意思是我不想这样做 $sql = "SELECT * FROM $table WHERE 1"

清理用户密码

在散列和存储在我的数据库之前,我应该如何转义或清理用户提供的密码? 当PHP开发人员出于安全目的考虑对用户密码进行哈希处理时,他们通常倾向于将这些密码视为其他用户提供的数据。 这个问题经常出现在与密码存储相关的PHP问题中; 开发人员通常希望在使用escape_string() (在各种迭代中), htmlspecialchars() , addslashes()等函数来清理密码并将其存储在数据库中之前,开发人员通常要清理密码。

我可以在PHP中混合使用MySQL API吗?

我search了networking,到目前为止我所看到的是,你可以使用mysql_和mysqli_在一起意思是: <?php $con=mysqli_connect("localhost", "root" ,"" ,"mysql"); if( mysqli_connect_errno( $con ) ) { echo "failed to connect"; }else{ echo "connected"; } mysql_close($con); echo "Done"; ?> 要么 <?php $con=mysql_connect("localhost", "root" ,"" ,"mysql"); if( mysqli_connect_errno( $con ) ) { echo "failed to connect"; }else{ echo "connected"; } mysqli_close($con); echo "Done"; ?> 是有效的,但是当我使用这个代码我得到的是: Connected Warning: mysql_close() expects parameter 1 […]

PDO MySQL:使用PDO :: ATTR_EMULATE_PREPARES还是不行?

这是迄今为止我读到的有关PDO::ATTR_EMULATE_PREPARES : 因为MySQL本地准备绕过查询缓存,所以PDO的准备模拟对性能更好 。 MySQL的本地准备对安全性更好(防止SQL注入) 。 MySQL的本地准备更适合错误报告 。 我不知道这些陈述如何是真实的。 选择MySQL接口的最大问题是防止SQL注入。 第二个问题是性能。 我的应用程序目前使用程序MySQLi(没有准备好的语句),并利用查询缓存相当多。 它很少会在一个请求中重复使用准备好的语句。 我开始转移到PDO的命名参数和准备好的语句的安全性。 我正在使用MySQL 5.1.61和PHP 5.3.2 我应该离开PDO::ATTR_EMULATE_PREPARES启用或不? 有没有办法同时具有查询缓存的性能和预准备语句的安全性?

PHP PDO编写语句

今天我被告知,我应该真的在使用PDO并在我的应用程序中准备好声明。 虽然我了解这些好处,但我正在努力了解如何将其实施到我的工作流程中。 除了使代码更清洁的事实,我应该有一个特定的数据库类,它包含我所有的准备好的语句,或者我应该创建一个每次我想运行一个查询? 我很难理解什么时候应该使用标准的PDO查询,什么时候应该使用准备好的语句。 任何示例,技巧或教程链接将不胜感激。