php中使用pdo使用prepare预处理语句能同时提供多条吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php中使用pdo使用prepare预处理语句能同时提供多条吗相关的知识,希望对你有一定的参考价值。
在多表插入时,必须要获取关联表的字段,下个表才能插入,这种情况下,能否一次上传多个prepare的预处理方法,然后分表插入。试了下,好像不行。
当然用数组的方式先存储先插入表的id然后再指插入到关联的表中,这样虽然可以做到,但数据不规则时,难免会出现错误。
感觉这PDO的处理数据库,虽然有些方便,但也有很多不尽人意的地方。
原来不是不可以,只是绑定的参数出了错误,问题已经解决,可惜没有人来回答。
你需要的是Transaction吧
START TRANSACTIONSELECT ******
UPDATE ******
UPDATE ******
COMMIT追问
你说的是事务处理吗? 你错了。事务归事务,预处理是预处理,二马事。别搞混了呀。
PHP PDO - 关闭语句 - 不能创建超过 max_prepared_stmt_count 语句
【中文标题】PHP PDO - 关闭语句 - 不能创建超过 max_prepared_stmt_count 语句【英文标题】:PHP PDO - Close statement - Can't create more than max_prepared_stmt_count statements 【发布时间】:2017-01-09 05:20:51 【问题描述】:如何使用 PDO 关闭语句?如果我检查一般的 MySQL 日志,我永远不会遇到关闭命令。 (command_type: 关闭 stmt)。
截至目前,MySQL 在其中一些查询之后抛出“Can't create more than max_prepared_stmt_count statements”。
一个奇怪的事情是 PDO 准备查询,即使没有任何准备。为什么不直接执行查询(command_type: Execute)?
片段
// Executes a SQL query and returns the PDO statement
$statement = $pdo->query(sprintf('CALL TEST_PROCEDURE(%s)', implode(',', $parameters)));
// Retrieve the result of the query
$result = current($statement->fetchAll(PDO::FETCH_OBJ));
$statement = null;
一般日志
select * from mysql.general_log where argument like "%call%" \G;
...
event_time: 2016-09-01 10:34:40
user_host: root[root] @ localhost [127.0.0.1]
thread_id: 4111
server_id: 0
command_type: Prepare
argument: CALL TEST_PROCEDURE(234,'989',1,'3353' ....)
*************************** 2. row ***************************
command_type: Execute
argument: CALL TEST_PROCEDURE(234,'989',1,'3353' ....)
【问题讨论】:
当没有使用 prepare() 方法时,PDO 不准备任何东西。我会说这是与 mysql 日志有关的东西 一些想法:确实,PDO 'query()' 函数用于返回结果的事物,即SELECT
s。对于其他一切应使用exec()
(executes an SQL statement in a single function call)。因此,当query()
函数用于“调用”时,必须将其转换为“exec()”语句。 PDO 或数据库引擎。为什么要获得准备好的陈述将需要更多搜索。
@RyanVincent MySQL 过程正在返回,因此是查询方法而不是执行。
@user634545 顺便问一下,你能试试用 exec() 代替 query() 吗?以防万一。
现在我很困惑。我认为 mysql 程序不能返回一个值,因为这就是函数的用途? Out parameters
可用于从过程中返回值。这是 PDO 的另一个独立问题...
【参考方案1】:
您可以通过调用$statement->closeCursor();
显式关闭连接
【讨论】:
我也尝试过 closeCursor,没有任何区别。$statement = null;
正在做同样的事情。您试图提高声誉的这个问题并不像您想象的那么愚蠢。
@YourCommonSense 哇,我开始想念您宝贵的 cmets。 :)以上是关于php中使用pdo使用prepare预处理语句能同时提供多条吗的主要内容,如果未能解决你的问题,请参考以下文章