2011-03-25 158 views
2

嘿,所以我是新的PDO,我无法弄清楚为什么我的数据不会插入到我的表中。非常感激!PHP 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)); 

?> 
+1

你的问题的标题说,你得到一个连接失败,但你的问题的身体并没有提到一个具体问题的任何错误更新。你能否提供更多的细节,比如你得到的任何错误的完整和完整的措辞? – Charles 2011-03-25 00:53:06

+4

使用'try'块封装您的PDO代码,并为'PDOException'添加一个catch。然后获取异常消息并将其包含在问题中。 – 2011-03-25 00:54:57

+2

这可能与您的问题无关,但我很惊讶有多少人不这样做,因为这有助于节省调试时间,尤其是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。这个文件变得非常快。 – mardala 2011-03-26 01:44:13

回答

2

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

,以找出是否正在出现的任何错误,添加以下后您的new PDO声明(PDO错误报告是沉默默认):

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

然后加入try/catch各地各PDO活动如下:

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(); 
} 

?> 

然后请您收到:)