PHP PDO连接失败[重复]

问题描述 投票:1回答:2

这个问题在这里已有答案:

嘿,所以我是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));

?>
php mysql insert pdo
2个回答
2
投票

如果你的所有表的字段名都匹配,我发现如果你的一个数组变量为空,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();
 }

?>

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


-3
投票

首先,在try-catch块中插入可能出错的所有内容(例如数据库连接)是一种很好的做法。

try {
    $conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDO Exception $e) {
    return $e;
}

你的sql语句中有一个错误。你需要在反引号(`)中放置表和列的名称

INSERT INTO `users` (`username`,`password`,`email`,`firstName`,`lastName`,`createDate`) VALUES (:username,:password,:email,:firstName,:lastName,:date)

最终代码:

<?php

include("class.php");

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

try {
    $conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDO Exception $e) {
    return $e;
}

$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));

?>
© www.soinside.com 2019 - 2024. All rights reserved.