【问题标题】:PHP PDO connection failure [duplicate]PHP PDO连接失败[重复]
【发布时间】:2011-07-22 14:11:28
【问题描述】:

嘿,我是 PDO 的新手,我不知道为什么我的数据不会插入到我的表中。非常感谢!

<?php

include("class.php");

$dbhost     = "localhost";
$dbname     = "db";
$dbuser     = "user";
$dbpass     = "pass";

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

$username = $_POST['username'];
$password = $_POST['password'];
$email = strtolower($_POST['email']);
$firstName = ucwords(strtolower($_POST['firstName']));
$lastName = ucwords(strtolower($_POST['lastName']));
$date = date("Y-m-d");
$hash = Secure::Encrypt($username, $password);

$sql = "INSERT INTO users (username,password,email,firstName,lastName,createDate) VALUES (:username,:password,:email,:firstName,:lastName,:date)";
$q = $conn->prepare($sql);
$q->execute(array(
':username'=>$username,
':password'=>$hash,
':email'=>$email,
':firstName'=>$firstName,
':lastName'=>$lastName,
':date'=>$date));

?>

【问题讨论】:

  • 您的问题标题表明您遇到了连接故障,但您的问题正文未提及具体问题。您能否提供更多详细信息,例如您遇到的任何错误的完整措辞?
  • try 块包裹你的PDO 代码,并带有PDOException 的catch。然后获取异常消息并将其包含在问题中。
  • 这可能与您的问题无关,但我很惊讶有多少人不这样做,因为它有助于节省调试时间,尤其是使用 PDO。我倾向于总是手动检查我的查询。如果您可以控制服务器,即开发盒等,您可能需要打开 mysql 日志记录。如果您在 linux 上,例如 /etc/mysql/my.cnf 查找日志部分,取消注释,重新启动 mysql /etc/init.d/mysql restart .. 然后以 root (sudo -i) 身份执行此操作:tail - f /var/log/mysql/mysql.log | grep INSERT 完成后记得关闭 mysql.log。这个文件很快就变大了。

标签: php mysql insert pdo


【解决方案1】:

如果您的表的所有字段名称都匹配,我发现如果您的数组变量之一为空,PDO 有时会失败。

要查看是否有任何错误被抛出,请在您的 new PDO 声明后添加以下内容(默认情况下 PDO 错误报告是无声的):

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

然后在每个 PDO 活动周围添加try/catch,如下所示:

try {
    ..Code Here...
}catch (PDOException $err) {
    echo $err->getMessage();
}

最终代码:

<?php

include("class.php");

$dbhost     = "localhost";
$dbname     = "db";
$dbuser     = "user";
$dbpass     = "pass";

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$username = $_POST['username'];
$password = $_POST['password'];
$email = strtolower($_POST['email']);
$firstName = ucwords(strtolower($_POST['firstName']));
$lastName = ucwords(strtolower($_POST['lastName']));
$date = date("Y-m-d");
$hash = Secure::Encrypt($username, $password);

$sql = "INSERT INTO users (username,password,email,firstName,lastName,createDate) VALUES (:username,:password,:email,:firstName,:lastName,:date)";
try {    
    $q = $conn->prepare($sql);
 }catch (PDOException $err) {
    echo 'Prepare Failed: '.$err->getMessage();
 }
try {    
    $q->execute(array(
    ':username'=>$username,
    ':password'=>$hash,
    ':email'=>$email,
    ':firstName'=>$firstName,
    ':lastName'=>$lastName,
    ':date'=>$date));
 }catch (PDOException $err) {
    echo 'Execute Failed: '.$err->getMessage();
 }

?>

那么请更新您收到的任何错误:)

【讨论】:

    猜你喜欢
    • 2012-03-13
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多