我似乎无法从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代码以在MySQL表中插入记录时遇到困难.
直接输入WAMP的代码工作正常:
INSERT INTO `users` (`userName`,`userEmail`) VALUES ('orange','orange@gmail.com')
Run Code Online (Sandbox Code Playgroud)
这个PHP代码不起作用:
<?php
$dbHost="localhost";
$dbName="project";
$dbUser="admin";
$dbPassword="abcd";
$dbh=new PDO("mysql:host=$dbHost;dbName=$dbName", $dbUser, $dbPassword);
print_r($dbh);
echo "</br>";
print_r($dbh->errorInfo());
$query=$dbh->prepare("INSERT INTO users (userName, userEmail) VALUES (?,?)");
echo "</br>";
print_r(var_dump($query->errorInfo()));
echo "</br>";
print_r($query->errorCode());
echo "</br>";
print_r($dbh->errorInfo());
$query->bindValue(1, 'apple');
echo "</br>";
print_r(var_dump($query->errorInfo()));
echo "</br>";
print_r($query->errorCode());
echo "</br>";
print_r($dbh->errorInfo());
$query->bindValue(2, 'apple@gmail.com');
echo "</br>";
print_r(var_dump($query->errorInfo()));
echo "</br>";
print_r($query->errorCode());
echo "</br>";
print_r($dbh->errorInfo());
$inserted=$query->execute(); //True if succesful, False if not.
echo "</br>";
print_r(var_dump($query->errorInfo()));
echo "</br>";
print_r($query->errorCode());
echo "</br>";
print_r($dbh->errorInfo());
echo "</br>";
if ($inserted){print_r("true");}else{print_r("false");}; …Run Code Online (Sandbox Code Playgroud) 假设我有一个类:
class pdoc {
private static $db_connect_pool;
public static function openConnect() {
try {
$connect_options_arr = array(PDO::ATTR_PERSISTENT => true);
self::$db_connect_pool[''.DB_DRIVER.'_'.DB_NAME.''] = new PDO("".DB_DRIVER.":host=".DB_HOST.";db_name=".DB_NAME."", DB_USER, DB_PASS, $connect_options_arr);
} catch (Exception $e) {
print_r($e);
}
}
public static function getConnection() {
return self::$db_connect_pool[''.DB_DRIVER.'_'.DB_NAME.''];
}
public static function qry($sql) {
self::openConnect();
$db_handle = self::getConnection();
$st_handle = $db_handle->prepare($sql);
return $st_handle->execute();
}
}
Run Code Online (Sandbox Code Playgroud)
然后,调用类:
$sql = "SELECT * FROM sometable";
if(pdoc::qry($sql)) echo "y";
else echo "n";
Run Code Online (Sandbox Code Playgroud)
为什么代码总是返回n?我检查了已成功连接的连接,但是当我尝试执行一些查询时,它什么也没返回。有任何想法吗?谢谢。
class pdoc { …Run Code Online (Sandbox Code Playgroud)