• 关于

    PDOStatement

    的搜索结果

回答

PDOStatement->execute()成功返回true。还有PDOStatement->errorCode(),你可以检查错误。来源:stack overflow

保持可爱mmm 2020-05-11 15:56:01 0 浏览量 回答数 0

回答

根据手册,有一种PDOStatement->rowCount方法;但不应使用(引用): 对于大多数数据库, PDOStatement::rowCount() 不返回受SELECT语句影响的行数。 而是使用 PDO::query() 发出SELECT COUNT(*)与您的预期SELECT 语句相同的谓词的语句,然后使用 PDOStatement::fetchColumn()检索将返回的行数。 然后,您的应用程序可以执行正确的操作。 如果您已经有一个记录集,并且想知道其中有多少行,则必须使用一种fetch*方法来获取数据;并使用计数-就像您建议的那样。来源:stack overflow

保持可爱mmm 2020-05-17 14:14:49 0 浏览量 回答数 0

问题

求教PDOStatement::setFetchMode()问题

落地花开啦 2019-12-01 20:02:20 854 浏览量 回答数 1

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!

回答

引用来自“Roger蛋蛋”的答案 http://www.php.net/manual/en/pdostatement.fetchcolumn.php string PDOStatement::fetchColumn ([ int $column_number = 0 ] ) Returns a single column from the next row of a result set or FALSE if there are no more rows. Warning There is no way to return another column from the same row if you use PDOStatement::fetchColumn() to retrieve data. 没啥好解决的,就是判断下query的返回值是否为FALSE var_dump($res); 跟流程没屌关系 像 @Roger蛋蛋 说的,看query之后返回的值 ###### fetchColumn把资源给抓取完了, 也就是说用完了. 这跟调用一次的函数原理相同. ###### 引用来自“Tuesday”的答案 fetchColumn把资源给抓取完了, 也就是说用完了. 这跟调用一次的函数原理相同. 抓取完了就不能再调用了?那如何解决呢?第二个sql怎么查询 ###### http://www.php.net/manual/en/pdostatement.fetchcolumn.php string PDOStatement::fetchColumn ([ int $column_number = 0 ] ) Returns a single column from the next row of a result set or FALSE if there are no more rows. Warning There is no way to return another column from the same row if you use PDOStatement::fetchColumn() to retrieve data. 没啥好解决的,就是判断下query的返回值是否为FALSE var_dump($res); ###### 引用来自“苏翰”的答案 引用来自“Tuesday”的答案 fetchColumn把资源给抓取完了, 也就是说用完了. 这跟调用一次的函数原理相同. 抓取完了就不能再调用了?那如何解决呢?第二个sql怎么查询 你抓过一次了, 已经知道结果了, 为什么要抓第二次? 第一次的结果你不保存的? ###### 引用来自“Tuesday”的答案 引用来自“苏翰”的答案 引用来自“Tuesday”的答案 fetchColumn把资源给抓取完了, 也就是说用完了. 这跟调用一次的函数原理相同. 抓取完了就不能再调用了?那如何解决呢?第二个sql怎么查询 你抓过一次了, 已经知道结果了, 为什么要抓第二次? 第一次的结果你不保存的? 我2个sql都要查询 ###### 引用来自“苏翰”的答案 引用来自“Tuesday”的答案 引用来自“苏翰”的答案 引用来自“Tuesday”的答案 fetchColumn把资源给抓取完了, 也就是说用完了. 这跟调用一次的函数原理相同. 抓取完了就不能再调用了?那如何解决呢?第二个sql怎么查询 你抓过一次了, 已经知道结果了, 为什么要抓第二次? 第一次的结果你不保存的? 我2个sql都要查询 $rs=$conn->query("select count(*) from member where id=0 "); 3 $total=$rs->fetchColumn(); 2 $res=$conn->query("select count(*) from member where mess=0 "); 4 $res_total=$res->fetchColumn(); 这似乎是非常基础的流程问题呀.  

kun坤 2020-05-29 18:22:33 0 浏览量 回答数 0

回答

PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数 PDOStatement::fetch — 从结果集中获取下一行 <?php$pdo = new PDO('mysql:host=127.0.0.1;dbname=test;charset=utf8', 'root', 'root'); $query = $pdo->query('SELECT * from users');//获取一行$result=$query->fetch(); print_r($result); $total = $pdo->query('SELECT * from test');//统计条数$count=$total->rowCount(); echo $count;

我的中国 2019-12-02 01:34:03 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 PDO(PHP Data Object) 是PHP5中新加入的模块,是PHP5新加入的一个重大功能,使用非常方便,php3/4没法使用,链接实例可以参考如下代码:<?php $pdo = new PDO("mysql:host=数据库地址;dbname=数据库名","数据库用户名","数据库密码"); if(!$pdo){ echo("fail");}else{ echo("sucess");} ?> 常用的一些函数:PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作。PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作。PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID。 PDOStatement::fetch() 是用来获取一条记录。 PDOStatement::fetchAll() 是获取所有记录集到一个中。 

2019-12-01 23:20:43 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 PDO(PHP Data Object) 是PHP5中新加入的模块,是PHP5新加入的一个重大功能,使用非常方便,php3/4没法使用,链接实例可以参考如下代码:<?php $pdo = new PDO("mysql:host=数据库地址;dbname=数据库名","数据库用户名","数据库密码"); if(!$pdo){ echo("fail");}else{ echo("sucess");} ?> 常用的一些函数:PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作。PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作。PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID。 PDOStatement::fetch() 是用来获取一条记录。 PDOStatement::fetchAll() 是获取所有记录集到一个中。 

2019-12-01 23:20:43 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 PDO(PHP Data Object) 是PHP5中新加入的模块,是PHP5新加入的一个重大功能,使用非常方便,php3/4没法使用,链接实例可以参考如下代码:<?php $pdo = new PDO("mysql:host=数据库地址;dbname=数据库名","数据库用户名","数据库密码"); if(!$pdo){ echo("fail");}else{ echo("sucess");} ?> 常用的一些函数:PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作。PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作。PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID。 PDOStatement::fetch() 是用来获取一条记录。 PDOStatement::fetchAll() 是获取所有记录集到一个中。 

2019-12-01 23:20:43 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 PDO(PHP Data Object) 是PHP5中新加入的模块,是PHP5新加入的一个重大功能,使用非常方便,php3/4没法使用,链接实例可以参考如下代码:<?php $pdo = new PDO("mysql:host=数据库地址;dbname=数据库名","数据库用户名","数据库密码"); if(!$pdo){ echo("fail");}else{ echo("sucess");} ?> 常用的一些函数:PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作。PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作。PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID。 PDOStatement::fetch() 是用来获取一条记录。 PDOStatement::fetchAll() 是获取所有记录集到一个中。 

2019-12-01 23:20:43 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 PDO(PHP Data Object) 是PHP5中新加入的模块,是PHP5新加入的一个重大功能,使用非常方便,php3/4没法使用,链接实例可以参考如下代码:<?php $pdo = new PDO("mysql:host=数据库地址;dbname=数据库名","数据库用户名","数据库密码"); if(!$pdo){ echo("fail");}else{ echo("sucess");} ?> 常用的一些函数:PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作。PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作。PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID。 PDOStatement::fetch() 是用来获取一条记录。 PDOStatement::fetchAll() 是获取所有记录集到一个中。 

2019-12-01 23:20:42 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 PDO(PHP Data Object) 是PHP5中新加入的模块,是PHP5新加入的一个重大功能,使用非常方便,php3/4没法使用,链接实例可以参考如下代码:<?php $pdo = new PDO("mysql:host=数据库地址;dbname=数据库名","数据库用户名","数据库密码"); if(!$pdo){ echo("fail");}else{ echo("sucess");} ?> 常用的一些函数:PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作。PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作。PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID。 PDOStatement::fetch() 是用来获取一条记录。 PDOStatement::fetchAll() 是获取所有记录集到一个中。 

2019-12-01 23:20:43 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 PDO(PHP Data Object) 是PHP5中新加入的模块,是PHP5新加入的一个重大功能,使用非常方便,php3/4没法使用,链接实例可以参考如下代码:<?php $pdo = new PDO("mysql:host=数据库地址;dbname=数据库名","数据库用户名","数据库密码"); if(!$pdo){ echo("fail");}else{ echo("sucess");} ?> 常用的一些函数:PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作。PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作。PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID。 PDOStatement::fetch() 是用来获取一条记录。 PDOStatement::fetchAll() 是获取所有记录集到一个中。 

2019-12-01 23:20:44 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 PDO(PHP Data Object) 是PHP5中新加入的模块,是PHP5新加入的一个重大功能,使用非常方便,php3/4没法使用,链接实例可以参考如下代码:<?php $pdo = new PDO("mysql:host=数据库地址;dbname=数据库名","数据库用户名","数据库密码"); if(!$pdo){ echo("fail");}else{ echo("sucess");} ?> 常用的一些函数:PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作。PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作。PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID。 PDOStatement::fetch() 是用来获取一条记录。 PDOStatement::fetchAll() 是获取所有记录集到一个中。 

2019-12-01 23:20:44 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 PDO(PHP Data Object) 是PHP5中新加入的模块,是PHP5新加入的一个重大功能,使用非常方便,php3/4没法使用,链接实例可以参考如下代码:<?php $pdo = new PDO("mysql:host=数据库地址;dbname=数据库名","数据库用户名","数据库密码"); if(!$pdo){ echo("fail");}else{ echo("sucess");} ?> 常用的一些函数:PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作。PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作。PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID。 PDOStatement::fetch() 是用来获取一条记录。 PDOStatement::fetchAll() 是获取所有记录集到一个中。 

2019-12-01 23:20:43 0 浏览量 回答数 0

问题

从PDO准备好的语句获取原始SQL查询字符串

保持可爱mmm 2020-05-10 18:57:41 1 浏览量 回答数 1

回答

如果你使用 php_mysql 扩展,那么你只能取到第一个记录集。这也就是该扩展在 php5.5 被废止的原因之一如果你使用 php_mysqli 扩展,则有 mysqli::next_result 方法和 mysqli_next_result 函数如果你使用 php_PDO 扩展,则有 PDOStatement::nextRowset 方法用以移动查询结果集的指针。

小旋风柴进 2019-12-02 02:01:54 0 浏览量 回答数 0

回答

不是类型的问题,仔细看看文档:http://cn2.php.net/manual/zh/pdostatement.execute.php你这种execute调用方法,prepare时,要使用问号占位符;既然用了“冒号参数名”的方式,execute时传递的数组也要使用冒号参数名作为数组下标。另外,你是想获取将占位符替换成实际参数值之后的SQL语句吗?PDO是办不到的,因为prepared statement本质上是一种临时的存储过程

落地花开啦 2019-12-02 02:46:16 0 浏览量 回答数 0

回答

为将使用不同参数值多次发出的语句调用PDO :: prepare()和PDOStatement :: execute()可以使驱动程序协商查询计划的客户端和/或服务器端缓存,从而优化应用程序的性能,并且元信息,并消除了手动引用参数的需要,从而有助于防止SQL注入攻击。来源:stack overflow

保持可爱mmm 2020-05-17 10:49:39 0 浏览量 回答数 0

回答

原来,您需要使用PDOStatement::nextRowset。 $stmt = $db->query("SELECT 1; SELECT 2;"); $stmt->nextRowset(); var_dump( $stmt->fetchAll(PDO::FETCH_ASSOC) ); 这将返回第二个查询的结果。 这是一个有点奇怪的实现。如果多查询语句仅将两个结果集返回在一个数组下,那肯定会更容易。但是,优点是此实现允许使用不同的FETCH样式获取每个查询。来源:stack overflow

保持可爱mmm 2020-05-17 20:16:19 0 浏览量 回答数 0

问题

如何使用PDO从MySQL获取数值类型?

保持可爱mmm 2020-05-10 19:39:59 0 浏览量 回答数 1

回答

检查手册mysql_fetch_object()。它返回一个对象,而不是对象数组。 我猜你想要这样的东西 $results = mysql_query("SELECT * FROM sidemenu WHERE menu_id='".$menu."' ORDER BY id ASC LIMIT 1", $con); $sidemenus = array(); while ($sidemenu = mysql_fetch_object($results)) { $sidemenus[] = $sidemenu; } 可能我建议您看看PDO。PDOStatement::fetchAll(PDO::FETCH_OBJ)做你mysql_fetch_object()想做的事 来源:stack overflow

保持可爱mmm 2020-05-13 14:01:27 0 浏览量 回答数 0

回答

看一下PDOStatement.fetchAll方法。您也可以fetch在迭代器模式中使用。 fetchAll来自PHP文档的的代码示例: prepare("SELECT name, colour FROM fruit"); $sth->execute(); /* Fetch all of the remaining rows in the result set */ print("Fetch all of the remaining rows in the result set:\n"); $result = $sth->fetchAll(\PDO::FETCH_ASSOC); print_r($result); 结果: Array ( [0] => Array ( [NAME] => pear [COLOUR] => green ) [1] => Array ( [NAME] => watermelon [COLOUR] => pink ) )来源:stack overflow

保持可爱mmm 2020-05-11 10:53:43 0 浏览量 回答数 0

回答

我假设您的意思是您想要最终的SQL查询,并将参数值插入其中。我知道这对调试很有用,但是它不是准备好的语句的工作方式。参数不会在客户端与预准备的语句组合,因此PDO绝对不能访问与其参数组合的查询字符串。 当您执行prepare()时,SQL语句将发送到数据库服务器,而当您执行execute()时,将分别发送参数。MySQL的常规查询日志的确显示了最终SQL,其中包含在execute()之后插入的值。以下是我的一般查询日志的摘录。我从mysql CLI(不是从PDO)运行查询,但是原理是相同的。 081016 16:51:28 2 Query prepare s1 from 'select * from foo where i = ?' 2 Prepare [2] select * from foo where i = ? 081016 16:51:39 2 Query set @a =1 081016 16:51:47 2 Query execute s1 using @a 2 Execute [2] select * from foo where i = 1 如果您设置PDO属性PDO :: ATTR_EMULATE_PREPARES,则也可以获得所需的内容。在这种模式下,PDO将参数插值到SQL查询中,并在您执行execute()时发送整个查询。 这不是真正的准备查询。 通过在execute()之前将变量插值到SQL字符串中,可以避免准备查询的好处。 来自@afilina的评论: 否,文本SQL查询在执行期间不会与参数组合。因此,PDO没有任何东西可以向您显示。 在内部,如果您使用PDO :: ATTR_EMULATE_PREPARES,则PDO会在执行准备和执行之前复制SQL查询并向其中插入参数值。但是PDO不会公开此修改后的SQL查询。 PDOStatement对象具有属性$ queryString,但这仅在PDOStatement的构造函数中设置,并且在用参数重写查询时不会更新该属性。 对于PDO来说,要求他们公开重写的查询将是合理的功能请求。但是,除非您使用PDO :: ATTR_EMULATE_PREPARES,否则即使那样也不会给您“完整”的查询。 这就是为什么我显示了上面使用MySQL服务器的常规查询日志的解决方法的原因,因为在这种情况下,即使是带有参数占位符的准备好的查询也会在服务器上重写,并将参数值回填到查询字符串中。但这仅在日志记录期间完成,而不在查询执行期间完成。来源:stack overflow

保持可爱mmm 2020-05-10 18:58:00 0 浏览量 回答数 0

回答

尝试: $sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash2"; 和 $stm->execute(array(":user_id" => $user_id, ":hash" => $hash, ":expire" => $future, ":hash2" => $hash)); 文档摘录(http://php.net/manual/zh/pdo.prepare.php): 调用PDOStatement :: execute()时,对于要传递给语句的每个值,必须包含一个唯一的参数标记。您不能在准备好的语句中两次使用相同名称的命名参数标记。您不能在例如SQL语句的IN()子句中将多个值绑定到单个命名参数。来源:stack overflow

保持可爱mmm 2020-05-11 16:52:28 0 浏览量 回答数 0

问题

多次使用绑定参数

保持可爱mmm 2020-05-11 16:47:15 0 浏览量 回答数 1

回答

这是问题所在: $comments = $db->prepare($query); /* where $db is the PDO object */ $comments->execute(array($post, $min, $max)); PDOStatement :: execute()的手册页说(强调我的意思): 参量 input_parameters一个值数组,其中元素的数量与要执行的SQL语句中绑定参数的数量相同。所有值均视为PDO :: PARAM_STR。 因此,您的参数将作为字符串插入,因此最终的SQL代码如下所示: LIMIT '0', '10' 这是MySQL不会转换为数字而是触发解析错误的特殊情况: mysql> SELECT 1 LIMIT 0, 10; +---+ | 1 | +---+ | 1 | +---+ 1 row in set (0.00 sec) mysql> SELECT 1 LIMIT '0', '10'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0', '10'' at line 1 文档怎么说: 该LIMIT子句可用于约束SELECT语句返回的行数。LIMIT接受一个或两个数字参数,这些参数都必须是非负整数常量,但以下情况除外: 在准备好的语句中,LIMIT可以使用?指定参数。占位符标记。 在存储的程序中,LIMIT可以使用整数值的例程参数或局部变量来指定参数。 您的选择包括: 一对一绑定参数,以便您可以设置类型: $comments->bindParam(1, $post, PDO::PARAM_STR); $comments->bindParam(2, $min, PDO::PARAM_INT); $comments->bindParam(3, $min, PDO::PARAM_INT); 不要将这些值作为参数传递: $query = sprintf('SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT %d, %d', $min, $max); 禁用模拟准备(MySQL驱动程序具有一个错误/功能,会使它引用数字参数): $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);来源:stack overflow

保持可爱mmm 2020-05-10 22:21:43 0 浏览量 回答数 0

回答

首先要说的是,由于只有一个查询,您可以插入多行 INSERT INSERT INTO Table (col1, col2, col3) VALUES ('abc', 'def', 'ghi'), ('abc', 'def', 'ghi'), ('abc', 'def', 'ghi'), ('abc', 'def', 'ghi'), ('abc', 'def', 'ghi') -- and so on... 知道了这一点之后,便可以使用PDO获得良好的解决方案(例如)。 你要记住,你想有一个完整prepare和execute过程(在安全期限,你必须单独通过每个参数)。 假设您要插入的行结构如下: $rows = array( array('abc', 'def', 'ghi'), // row 1 to insert array('abc', 'def', 'ghi'), // row 2 to insert array('abc', 'def', 'ghi') // row 3 to insert // and so on ... ); 您的目标是将此结果作为准备好的查询: INSERT INTO Table (col1, col2, col3) VALUES (?, ?, ?), (?, ?, ?), (?, ?, ?) 及其相应的执行: PDOStatement::execute(array('abc', 'def', 'ghi', 'abc', 'def', 'ghi', 'abc', 'def', 'ghi')); 好吧,您现在只需要这样做: $rows = array( array('abc', 'def', 'ghi'), array('abc', 'def', 'ghi'), array('abc', 'def', 'ghi') ); $row_length = count($rows[0]); $nb_rows = count($rows); $length = $nb_rows * $row_length; /* Fill in chunks with '?' and separate them by group of $row_length */ $args = implode(',', array_map( function($el) { return '('.implode(',', $el).')'; }, array_chunk(array_fill(0, $length, '?'), $row_length) )); $params = array(); foreach($rows as $row) { foreach($row as $value) { $params[] = $value; } } $query = "INSERT INTO Table (col1, col2, col3) VALUES ".$args; $stmt = DB::getInstance()->prepare($query); $stmt->execute($params); 而且...就是这样! 这样,每个参数都将被单独处理,这就是您想要的(安全性,安全性,安全性!)及其所有内容,并且只需一个INSERT查询就可以动态方式进行处理 如果要插入的行太多(请参阅此),则应execute一个接一个 $rows = array( array('abc', 'def', 'ghi'), // row 1 to insert array('abc', 'def', 'ghi'), // row 2 to insert array('abc', 'def', 'ghi') // row 3 to insert // and so on ... ); $args = array_fill(0, count($rows[0]), '?'); $query = "INSERT INTO Table (col1, col2, col3) VALUES (".implode(',', $args).")"; $stmt = $pdo->prepare($query); foreach ($rows as $row) { $stmt->execute($row); }来源:stack overflow

保持可爱mmm 2020-05-17 22:38:21 0 浏览量 回答数 0

问题

MySQL错误2014的原因其他未缓冲的查询处于活动状态时无法执行查询

保持可爱mmm 2020-05-13 13:47:08 0 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板