Questions tagged «pdo»

PDO(PHP数据对象)是PHP的数据访问抽象层(接口)。它适用于大多数数据库系统。

7
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或其他可能的漏洞。

21
我可以将数组绑定到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 = …


13
mysqli或PDO-优缺点是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 在我们的位置上,我们在使用mysqli和PDO进行准备语句和事务支持之类的工作之间有所分歧。有些项目使用一个,另一些使用。我们迁移到另一个RDBMS的现实可能性很小。 我更喜欢PDO,原因是它允许预准备语句使用命名参数,而据我所知mysqli不允许。 在我们将项目合并为仅使用一种方法时,是否有其他选择作为标准的利弊?

30
PDOException SQLSTATE [HY000] [2002]没有这样的文件或目录
我相信我已经将我的(非常基本的)站点成功部署到了fortrabbit,但是一旦我连接到SSH以运行某些命令(例如php artisan migrate或php artisan db:seed),我就会收到一条错误消息: [PDOException] SQLSTATE[HY000] [2002] No such file or directory 在某个时候,迁移肯定已经成功了,因为我的表在那里-但这不能解释为什么它现在对我不起作用。
319 php  mysql  laravel  pdo 

30
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安装有关吗? 搜索互联网没有帮助,我得到的只是专家交流和示例,但没有解决方案。
292 php  mysql  pdo  lamp 

7
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"
243 php  pdo 

23
PDO的行数
周围有许多矛盾的说法。在PHP中使用PDO进行行计数的最佳方法是什么?在使用PDO之前,我只是简单地使用mysql_num_rows。 fetchAll 这是我不想要的东西,因为有时我可能要处理大型数据集,因此对我的使用不利。 你有什么建议吗?
192 php  mysql  pdo 

10
PHP PDO:字符集,设置名称?
我以前在正常的mysql_ *连接中拥有此功能: mysql_set_charset("utf8",$link); mysql_query("SET NAMES 'UTF8'"); PDO是否需要它?那我应该在哪里呢? $connect = new PDO("mysql:host=$host;dbname=$db", $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
188 php  mysql  pdo 

8
在PDO中使用持久连接有哪些缺点
在PDO中,可以使用PDO::ATTR_PERSISTENT属性使连接持久化。根据PHP手册- 持久连接不会在脚本结尾处关闭,而是在另一个脚本使用相同凭据请求连接时被缓存并重新使用。持久性连接缓存使您避免每次脚本需要与数据库进行通信时建立新连接的开销,从而加快了Web应用程序的速度。 该手册还建议不要在使用PDO ODBC驱动程序时使用持久连接,因为这可能会妨碍ODBC连接池过程。 因此,除了最后一种情况外,在PDO中使用持久连接似乎没有任何缺点。但是,我想知道使用此机制是否还有其他缺点,即该机制导致性能下降或类似情况的情况。
181 php  pdo 

30
Laravel迁移错误:语法错误或访问冲突:1071指定的密钥太长;最大密钥长度为767字节
Laravel 5.4上的迁移错误 php artisan make:auth [Illuminate \ Database \ QueryException] SQLSTATE [42000]:语法错误或访问冲突:1071指定的密钥太长;默认值为0。最大密钥长度为767字节(SQL:更改表users添加唯一users_email_unique(email)) [PDOException] SQLSTATE [42000]:语法错误或访问冲突:1071指定的密钥太长;默认值为0。最大密钥长度为767字节

3
PDO获取最后插入的ID
我有一个查询,我想插入最后一个ID。字段ID是主键,并且是自动递增的。 我知道我必须使用以下语句: LAST_INSERT_ID() 该语句适用于如下查询: $query = "INSERT INTO `cell-place` (ID) VALUES (LAST_INSERT_ID())"; 但是,如果我想使用以下语句获取ID: $ID = LAST_INSERT_ID(); 我收到此错误: Fatal error: Call to undefined function LAST_INSERT_ID() 我究竟做错了什么?
158 php  mysql  database  pdo 

22
已准备好PDO在单个查询中插入多行
我目前在MySQL上使用这种类型的SQL在单个查询中插入多行值: INSERT INTO `tbl` (`key1`,`key2`) VALUES ('r1v1','r1v2'),('r2v1','r2v2'),... 关于PDO的阅读,使用准备好的语句应该比静态查询为我提供更好的安全性。 因此,我想知道是否可以使用准备好的语句生成“通过使用一个查询插入多行值”。 如果是,请问我该如何实施?

18
如何调试PDO数据库查询?
在转向PDO之前,我通过连接字符串在PHP中创建了SQL查询。如果出现数据库语法错误,我可以回显最终的SQL查询字符串,然后在数据库中自己尝试,然后对其进行调整,直到修复错误,然后将其重新放入代码中。 预先准备的PDO语句更快,更好,更安全,但有一件令我困扰的事情:在将最终查询发送到数据库时,我再也看不到。当我在Apache日志或自定义日志文件中收到有关语法的错误时(我将错误记录在一个catch块内),我看不到导致它们的查询。 有没有办法捕获由PDO发送到数据库的完整SQL查询并将其记录到文件中?
140 php  sql  pdo 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.