相关疑难解决方法(0)

如何在PDO PHP中查看查询错误

try {
    $db = new PDO("mysql:host=".HOST.";dbname=".DB, USER, PW);
    $st = $db->prepare("SELECT * FROM c6ode");
}
catch (PDOException $e){
    echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)

在上述情况下如何检查查询的mysql错误?

php mysql pdo

66
推荐指数
4
解决办法
10万
查看次数

如何从PDO中挤出错误信息?

我似乎无法从PDO收到任何错误消息:

#$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
try {
  $sth = $dbh->prepare('@$%T$!!!');
  print_r($sth);
  print_r($dbh->errorInfo());
} catch (PDOException $e) {
    echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)

它只给出:

PDOStatement Object
(
    [queryString] => @$%T$!!!
)
Array
(
    [0] => 00000
    [1] =>
    [2] =>
)
Run Code Online (Sandbox Code Playgroud)

setAttribute没有任何帮助.

这是PHP 5.3.3
支持MySQL的Apache 2.0 Handler PDO驱动程序
客户端API版本mysqlnd 5.0.7-dev - 091210 - $ Revision:300533 $

我该怎么做才能获得错误信息?

php error-handling pdo

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

PDO错误消息?

这是我的代码片段:

$qry = '
    INSERT INTO non-existant-table (id, score) 
    SELECT id, 40 
    FROM another-non-existant-table
    WHERE description LIKE "%:search_string%"
    AND available = "yes"
    ON DUPLICATE KEY UPDATE score = score + 40
';
$sth = $this->pdo->prepare($qry);
$sth->execute($data);

print_r($this->pdo->errorInfo());
Run Code Online (Sandbox Code Playgroud)

这应该给我一个错误,因为表甚至不存在.我得到的只是:

数组([0] => 00000)

如何更好地描述错误,以便我可以调试问题?

php pdo

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

设置PDO默认情况下抛出异常

如果发生错误,我总是希望PDO抛出异常,因为我总是像这样使用PDO:

try {
    $dbh = new PDO("mysql:host=$kdbhost;dbname=$kdbname",$kdbuser,$kdbpw);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // some queries
}
catch (PDOException $e) {
    error_log('PDO Exception: '.$e->getMessage());
    die('PDO says no.');
}
Run Code Online (Sandbox Code Playgroud)

如果有一个我可以编辑的配置文件就可以了,那么默认情况下PDO会抛出异常 - 这可能吗?

我想要这个的原因是我每次都不必写这行:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Run Code Online (Sandbox Code Playgroud)

更新 - 我已经创建了一个库来处理数据库访问(包括设置PDO以引发异常).

php mysql pdo php-ini

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

PDO SQL状态"00000"但仍然出错?

任何人都可以解释原因

$sql->execute($params);
Run Code Online (Sandbox Code Playgroud)

返回FALSE,而

print $pdo->errorCode();
print_r($pdo->errorInfo());
Run Code Online (Sandbox Code Playgroud)

两者都归还SQLSTATE 00000,这意味着根据文件的成功?它是一个INSERT,实际上没有任何东西被插入到数据库中...所以,为什么我会从中获得成功消息SQLSTATE


如果它有帮助,这是代码......

$sql = $pdo->prepare("
        INSERT INTO user (
            username, fname, pass, salt, email,
            loc_id_home, country_id_home, region_id_home,
            cont_id_home, timestamp_reg, timestamp_upd, timestamp_lastonline, 
            online_status, gender, birthdate
            )
        VALUES (
            :username,:fname,:pass,:random_salt,:email,
            :loc_id_home,:country_id_home,:region_id_home,
            :cont_id_home,'".time()."','".time()."','".time()."',
            1,:gender,:birthdate)
        ");

$params=array(
    ':username'=>$username,
    ':fname'=>$fname,
    ':pass'=>$pass,
    ':random_salt'=>$random_salt,
    ':email'=>$email,
    ':loc_id_home'=>$loc_id_home,
    ':country_id_home'=>$country,
    ':region_id_home'=>$region,
    ':cont_id_home'=>$continent,
    ':gender'=>$gender,
    ':birthdate'=>$birthdate
);  

$sql->execute($params);

print $pdo->errorCode();
print_r($pdo->errorInfo());
Run Code Online (Sandbox Code Playgroud)

php mysql sql database pdo

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

php/mysql - PDO准备插入,不起作用,并且没有错误消息

我现在真的不知道该怎么做,我已经盯着它好几个小时了,并且要求它......我无法让它起作用!

require_once("Abstracts/DBManager.php");
require_once("UI/UI.Package.php");
class BlogDBM extends DBManager
{
     private $table = "blog_records";
     function saveRecord($title,$url,$desc,$feedId,$pubDate)
     {
      $PDO = $this->db->connect();
      try
  {

   $query = $PDO->prepare("
    INSERT INTO ".$this->table."
    (title,url,desc,feed_id,pubdate) VALUES
    (:title,:url,:desc,:feed_id,:pubdate)");
   $query->bindParam(":title", $title);
   $query->bindParam(":url", $url);
   $query->bindParam(":desc", $desc);
   $query->bindParam(":feed_id", $feedId, PDO::PARAM_INT);
   $query->bindParam(":pubdate", $pubDate, PDO::PARAM_INT);
   $query->execute();
   //return $PDO->lastInsertId();


  } catch(PDOException $e)
  {
   echo "Error " . $e->getMessage();

  }
  $PDO = NULL;
     }
}
Run Code Online (Sandbox Code Playgroud)

php mysql pdo insert prepared-statement

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

如何处理PDO异常

我正在尝试使用PDOPHP 上的类,但我找到正确的方法来处理错误,我写了这段代码:

<?php
// $connection alreay created on a class which works with similar UPDATE statements
// I've simply added here trim() and PDO::PARAM... data type


$id = 33;
$name = "Mario Bros.";
$url = "http://nintendo.com";
$country = "jp";


try {

$sql = "UPDATE table_users SET name = :name, url = :url, country = :country WHERE user_id = :user_id";

$statement = $connection->prepare ($sql);

$statement->bindParam (':user_id', trim($id), PDO::PARAM_INT);
$statement->bindParam (':name', trim($name), PDO::PARAM_STR);
$statement->bindParam (':url', trim($url), PDO::PARAM_STR);
$statement->bindParam (':country', trim($country), …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo exception-handling

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

检查PDO准备语句时出错

我正在尝试使用PDO预处理语句为MySQL数据库上的查询创建正确的错误处理.我希望程序在检测到预准备语句进程中的错误时退出.利用PDO准备好的声明过程中的每一步都False失败的事实,我把这个令人反感的黑客扔到了一起:

 global $allFields;
 global $db;
 global $app;
 //dynamically append all relevant fields to query using $allFields global
 $selectQuery = 'SELECT ' . implode($allFields, ', ') .
     ' FROM People WHERE ' . $fieldName . ' = :value';
 //prepared statement -- returns boolean false if failure running query; run success check
 $success = $selectQueryResult = $db->prepare($selectQuery);
     checkSuccess($success);
 $success = $selectQueryResult->bindParam(':value', $fieldValue, PDO::PARAM_STR);
     checkSuccess($success);
 $success = $selectQueryResult->execute();
     checkSuccess($success);
Run Code Online (Sandbox Code Playgroud)

checkSuccess()执行以下操作:

function checkSuccess($success) {
    if ($success == false) {
        //TODO: …
Run Code Online (Sandbox Code Playgroud)

php mysql

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

pdo catch并输出mysql错误

仍然试图让我的头围绕pdo.

我有一个用pdo执行的insert语句.插入效果很好但是如果有错误我希望它显示给用户.

我有下面的try catch块.

try{ 
        $insertuser = $db->prepare('INSERT INTO `she_she`.`Persons` (`idnumber`,`addedby`,`firstname`, `middlename`, `surname`, `fullname`, `gender`, `birthdate`, `homelanguage`, `department`, `employeetype`, `employeestatus`) VALUES  (?,?,?,?,?,?,?,?,?,?,?,?)'); 
        $insertuser->execute(array($idnumber,$user,$firstname, $middlename, $surname, $fullname, $gender, $birthdate, $language, $department, $employmenttype, $personstatus));  
    } 
    catch(PDOException $exception){ 
        return $exception; 
    } 
Run Code Online (Sandbox Code Playgroud)

如果查询失败,或者说重复的IDNumber,我希望将其显示给用户.

如果我只是尝试回显变量$ exception它就不起作用.

我想将mysql错误返回给用户.

任何建议一如既往地赞赏.

谢谢,瑞恩

UPDATE

根据提议的答案的新代码:

   try{ 
        $insertuser = $db->prepare('INSERT INTO `she_she`.`Persons` (`idnumber`,`addedby`,`firstname`, `middlename`, `surname`, `fullname`, `gender`, `birthdate`, `homelanguage`, `department`, `employeetype`, `employeestatus`) VALUES  (?,?,?,?,?,?,?,?,?,?,?,?)'); 
        $insertuser->execute(array($idnumber,$user,$firstname, $middlename, $surname, $fullname, $gender, $birthdate, $language, $department, $employmenttype, $personstatus));  
    } 
    catch(PDOException $exception){ 
       return $exception->getMessage(); 
    } …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo try-catch

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

在boolean上调用成员函数fetch()

我收到此错误:

致命错误:在第34行的C:\ xampp\htdocs\repo\generator\model\database.php中调用boolean上的成员函数fetch()

当我运行此代码时:

    class database
    {
        private $user = 'root';
        private $pass = '';
        public $pdo;

        public function connect() {
            try {
                $this->pdo = new PDO('mysql:host=localhost; dbname=generatordatabase', $this->user, $this->pass);
                echo 'Po??czenie nawi?zane!';
            }
            catch(PDOException $e) {
                echo 'Po??czenie nie mog?o zosta? utworzone: ' . $e->getMessage();
            }
        }

        public function createTable() {

                        $q = $this->pdo -> query('SELECT * FROM article');
                          while($row = $q->fetch()) {
                              echo $row['id'].' ';
                          }
                          $q->closeCursor();
        }
    }

    ?>
Run Code Online (Sandbox Code Playgroud)

php boolean fetch

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