标签: pdostatement

从PDO预处理语句中获取原始SQL查询字符串

有没有办法在预准备语句上调用PDOStatement :: execute()时获取原始SQL字符串?出于调试目的,这将非常有用.

php mysql sql pdo pdostatement

125
推荐指数
9
解决办法
9万
查看次数

PHP PDOStatement:获取一行,作为第一列作为数组的键

PDOStatement用来查询数据库.每当我得到一个返回的行时,我希望将它$row[0]作为键提取到数组中,并将行中的后续元素作为值.

当然,我可以编写一个foreach循环和if条件组合来完成这项工作,如下所示:

private static function GetMySQLResult($dbname, $sqlString) {


        $dbh =  self::ConstructPDOObject($dbname);
         $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $result=array();
         foreach ($dbh->query($sqlString) as $row)
         {
            $result[$row[0]][]=$row[1];  // the simplest case for 2 columns, should add more to handle more columns

         }

         return $result;

}
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一种现有的方法; 有没有这样的方法已经存在?

php pdostatement

22
推荐指数
3
解决办法
1万
查看次数

带有PDOStatement的PDO重新连接"mysql server gone"错误

当超过mysql的wait_timeout时,我的PHP CLI脚本失去了连接.我无法更改wait_timeout,那么当我使用PDOStatement执行查询时,如何构建一个重新连接的try/catch语句?

php mysql pdo pdostatement

11
推荐指数
1
解决办法
5259
查看次数

PDOStatement :: bindParam data_type参数列表

是否有一个列表描述了您可以使用的所有data_type参数PDOStatement::bindParam()?如果没有,你通常使用什么,以及什么类型的领域?

根据PHP手册:data_type使用PDO :: PARAM_*常量的参数的显式数据类型.

我知道PDO::PARAM_INTPDO::PARAM_STR.我听说过,PDO::PARAM_LOB但我不知道如何以及何时使用它.(约会?)

php pdo pdostatement

9
推荐指数
1
解决办法
1万
查看次数

如何在PDOStatement :: bindValue()中定义变量类型?

PDOStatement对象:: bindValue()方法提供了一种方式来指定绑定的变量的类型:

PDOStatement :: bindValue($ parameter,$ value [,$ data_type = PDO :: PARAM_STR ])

我想知道,指定数据类型的目的是什么,而当作为default(PARAM_STR)离开时,数据库最终会在使用它之前将值转换为正确的类型?

例如,如果您对INTEGER字段进行了以下查询:

INSERT INTO table (integerField) VALUES (?) ;
SELECT * FROM table WHERE integerField = ?  ;
Run Code Online (Sandbox Code Playgroud)

并且您在PHP中绑定一个整数,PDO默认将它绑定为一个字符串,这相当于:

INSERT INTO table (integerField) VALUES ("1") ;
SELECT * FROM table WHERE integerField = "1"  ;
Run Code Online (Sandbox Code Playgroud)

这将完美地工作,因为SQL数据库(至少MySQL,我真的不知道它将如何在其他RDBMS上工作)知道如何在使用它之前将字符串转换回整数.

有哪些用例会对绑定的类型参数与字符串产生影响?

php sql pdo pdostatement bindvalue

9
推荐指数
1
解决办法
4379
查看次数

在PDO :: commit之后使用PDOStatement :: rowCount结果?

在MySQL文档中,有一个关于mysql_affected_rows在事务提交后使用的注释:http: //php.net/manual/en/function.mysql-affected-rows.php

注意:事务
如果您正在使用事务,则需要在INSERT,UPDATE或DELETE查询之后调用mysql_affected_rows(),而不是在COMMIT之后调用.

但是,该PDOStatement::rowCount文档没有这样的说明:http: //www.php.net/manual/en/pdostatement.rowcount.php

这是否意味着在使用PDO对象时INSERT,UPDATE或DELETE查询后提交不会影响受影响的行数?

php mysql pdo transactions pdostatement

8
推荐指数
1
解决办法
2005
查看次数

如何在PHP中的会话中存储对象?

您好我想在会话中存储或保存一个对象,使用类如SessionHandler或数组$ _SESSION,我已经看到,如果我序列化该对象,我可能不会丢失该对象的方法实例..我已经看到seralizing它是可能的,但我想要存储的对象是由PDOStatement :: fetchObject()创建的,虽然实例类是"Users"我得到这个错误:

PDOException:您无法序列化或反序列化PDO实例为什么?它不是PDO实例..

对不起,我是西班牙人,我不会说英语.谢谢

php persistence pdo pdostatement

8
推荐指数
1
解决办法
1万
查看次数

MySQL PDO fetchAll为具有整数索引的数组

我有一个有两列的表.表:ctgtable和列:idctg.由于我完全从以前的mysql_*功能转移到PDO,我面临一些愚蠢的错误(或者可能缺乏知识).

我想将整个表的ctg列(总共最多20行)选择为具有整数索引的数组.

我的方法

在我看来,最接近的解决方案是:

<?php
    $sth = $dbh->prepare("SELECT id, ctg FROM ctgtable");
    $sth->execute();
    /* Fetch all of the values of the second column */
    $result = $sth->fetchAll(PDO::FETCH_COLUMN, 1);
    var_dump($result);
?>
Run Code Online (Sandbox Code Playgroud)

对于相同的结果,还有其他更短/更好的替代方案吗?或者这是获取结果的最佳/唯一可能方法.

样本表

id      ctg
01     movie
27       tv
64     sports
Run Code Online (Sandbox Code Playgroud)

等等

样本结果

Array( 1 => "tv",
    2 => "movie",
    3 => "anime",
    4 => "game",
    5 => "telugu"
);
Run Code Online (Sandbox Code Playgroud)

索引可以从0开始,也可以不从0开始.对我来说无关紧要.我试着寻找这样一个可能的问题,但似乎没有一个问题与我的问题相关.

php pdo pdostatement

6
推荐指数
1
解决办法
1万
查看次数

PDO :: Query()返回false

我正在尝试在PHP中学习和使用PDO.我在query()方法中遇到了一个问题.

我试图用来$sth = $db->query("SELECT * FROM titles ORDER BY RAND() LIMIT 1");随机选择一个网站的标题,但由于某种原因,$sth总是假的.它的工作原理,当我用prepare()execute(),但我试图找到什么是错的query().

这是我正在调用的整个函数:

function getTitle($db)
    {
    if($db)
        {
            $db->exec("USE " . $dbsite); 
            $sth = $db->query("SELECT * FROM titles ORDER BY RAND() LIMIT 1");
            $title = $sth->fetch(PDO::FETCH_ASSOC);

            $db->exec("UPDATE titles SET count = count + 1 WHERE id = " . $title['id']);

            return $title['title'];
        }
    else
            return 'Home - Database Offline';

}
Run Code Online (Sandbox Code Playgroud)

php mysql pdo pdostatement

2
推荐指数
1
解决办法
1万
查看次数

是否可以将PDO参数绑定到对象的成员变量?

使用时PDOStatement::bindParam(),可以将参数绑定到变量 - 这在多次执行预准备语句时尤其有用,每个语句具有不同的参数值.例如:

$dbh = new PDO('mysql:dbname=foo', 'eggyal', 'password1');
$qry = $dbh->prepare('DELETE FROM bar WHERE qux = ?');
$qry->bindParam(1, $qux, PDO::PARAM_INT);

while (true) {
  $qux = ... ;
  $qry->execute();
  // etc
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 是否可以将参数绑定到对象的成员变量?例如:

    $qry->bindParam(1, $obj->qux, PDO::PARAM_INT);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果是这样,对象的成员变量是这样的参数绑定:在bindParam()调用时引用的那个,还是在语句执行时引用的那个?例如:

    $obj->qux = 123;
    
    $obj = new stdClass();
    $obj->qux = 456;
    
    $qry->execute();  // which value is used for qux ?
    
    Run Code Online (Sandbox Code Playgroud)
  3. 这种行为记录在哪里(如果有的话)?

php oop pdo prepared-statement pdostatement

2
推荐指数
1
解决办法
785
查看次数