使用PDO的PDOStatement 执行多个语句发生错误。所有执行多个语句,就是指在sql语句中有分号";"在一个sql语句写多个语句。
$table_name_user = "user";
$sql_create_table_user = "
DROP TABLE IF EXISTS {$table_name_user};
CREATE TABLE {$table_name_user} ( #创建名称为user的数据表
id int(11) unsigned NOT NULL auto_increment, #保存用户的ID,无符号、非空、自动增长
username varchar(20) NOT NULL default '', #保存用户名
userpwd varchar(32) NOT NULL default '', #保存用户密码
PRIMARY KEY (id) #将用户的id设置为主键
)
";
错误代码如下:
错误:SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
根据提示设置PDO::MYSQL_ATTR_USE_BUFFERED_QUERY属性。
$dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
重启数据库和服务,结果还是不行。
最终解决方案:
将sql语句拆开,每个只有一句,然后分别执行。
$table_name_user = "user";
$sql_drop_table_use = "DROP TABLE IF EXISTS {$table_name_user}";
$sql_create_table_user = "
CREATE TABLE {$table_name_user} ( #创建名称为user的数据表
id int(11) unsigned NOT NULL auto_increment, #保存用户的ID,无符号、非空、自动增长
username varchar(20) NOT NULL default '', #保存用户名
userpwd varchar(32) NOT NULL default '', #保存用户密码
PRIMARY KEY (id) #将用户的id设置为主键
)
";
分享到:
相关推荐
使用预处理语句的好处在于,可以多次执行相同或相似的SQL语句,而只在每次执行时改变其中的参数。这种机制能够提高数据库操作的效率,并增强安全性,因为预处理语句可以有效防止SQL注入攻击。 在使用PDOStatement...
通过`PDO::prepare()`创建预处理语句,然后使用`PDOStatement::bindParam()`或`PDOStatement::bindValue()`绑定参数,最后调用`PDOStatement::execute()`执行。 3. **执行SQL查询**:使用`PDOStatement::query()`...
执行预处理语句使用`execute()`方法。 5. **事务处理**:PDO支持事务,可以通过`beginTransaction()`开始一个事务,`commit()`提交,`rollBack()`回滚。在事务中执行的所有SQL操作要么全部成功,要么全部失败。 6....
- `PDO->prepare()`:预处理SQL语句,返回一个PDOStatement对象。 - `PDO->query()`:执行SQL并返回PDOStatement对象。 - `PDO->lastInsertId()`:获取最后一次插入操作产生的自增主键值。 - `PDO->quote()`:为SQL...
1. **使用预处理语句**:预处理语句不仅提高了安全性,还可以提高性能,尤其是在多次执行相同SQL语句的情况下。 2. **错误处理**:使用异常处理机制可以更好地管理和记录应用程序中的错误。 3. **资源管理**:确保...
对于语句对象引发的错误,可以使用`PDOStatement::errorCode()`或`PDOStatement::errorInfo()`。 2. **警告模式(PDO::ERRMODE_WARNING)**: 在警告模式下,除了设置错误码,PDO还会发出一个E_WARNING级别的PHP...
- **应用场景**:对于需要多次执行相同 SQL 语句的情况,使用预处理语句可以提高效率并增强安全性。 7. **`PDO->query()`** - **功能**:执行一条 SQL 语句,并返回一个 PDOStatement 对象。 - **应用场景**:...
PDO数据库操作类中包含多个方法进行数据库操作,比如`query`、`exec`、`fetchAll`、`fetch`、`fetchColumn`和`lastInsertId`。这些方法对PDO对象进行封装,方便进行查询和操作。 - `query`方法执行一个SQL语句并...
通过`PDO::prepare()`创建预处理语句,然后使用`PDOStatement::execute()`执行,可以安全地绑定参数。 **fetch方法**有不同的模式,如关联数组、索引数组和对象。`fetchColumn()`用于获取结果集中的一列,`...
在PHP开发中,数据库操作是不可或缺的一部分,而PDO(PHP Data Objects)提供了一种安全、高效的方式来连接MySQL数据库并执行SQL语句。本教程将详细讲解如何使用PDO进行单次和多次的增删改查操作,并结合百度分页...
此外,PDO还支持使用PDO属性和PDOStatement属性进行更高级的数据库操作和优化,例如,可以设置PDO属性来控制错误模式、获取数据库驱动信息等。 总的来说,使用PDO操作MySQL数据库提供了高效、安全、可移植的数据库...
此外,PDO还支持使用PDOStatement来存储和执行SQL语句,这可以提高执行效率和代码的可维护性。 知识点七:使用PDO进行数据库连接访问。 一旦PDO配置成功,开发者就可以使用PDO对象进行数据库操作。例如,连接数据库...
- **使用数组执行含有IN子句的预处理语句**:当SQL语句包含`IN`子句时,可以使用一个数组来传递多个值。 ```php $params = array(1, 21, 63, 171); $place_holders = implode(',', array_fill(0, count($params), '...
PDOStatement是PDO库中的一个类,它代表预处理语句的实例,用于执行SQL查询并处理结果。`PDOStatement::getAttribute()`是这个类的一个方法,用于获取PDOStatement对象的属性值。在本文中,我们将深入探讨`...
在PDO中,使用PDOStatement对象来执行SQL语句并处理结果集。 PDOStatement::errorInfo函数返回一个数组,包含三个元素,每个元素都对应不同的错误信息层级: - 数组的第一个元素(索引0)是SQLSTATE错误码。这是一...
PDO::prepare PDO::prepare — 准备...为PDOStatement::execute()方法准备要执行的SQL语句,SQL语句可以包含零个或多个命名(:name)或问号(?)参数标记,参数在SQL执行时会被替换。 你不能在 SQL 语句中同时包含命名
在使用PDOStatement::fetchAll之前,需要执行一个PDOStatement对象的execute()方法来执行SQL语句并获取查询结果。在PHP 5.1.0版本之后,该函数被引入,并且在PECL PDO扩展库版本0.1.0以上也是可用的。 该函数的参数...