2009-10-20 79 views
0

我正在使用PDO在php中使用MySQL進行準備查詢。查詢執行時沒有錯誤,但一個參數不能正確傳遞值。它來自一個空白字段,但不是NULL。這真的很奇怪,因爲看起來我輸入的代碼與其他代碼相同,當然這很好。真令人沮喪。PHP PDO準備插入查詢。值不通過的問題

$f_name = $_POST['f_name']; 
$l_name = $_POST['l_name']; 
$email = $_POST['email']; 
$pass = $_POST['pass']; 
$address1 = $_POST['address_1']; 
$address2 = $_POST['address_2']; 
$suburb = $_POST['suburb']; 
$city = $_POST['city']; 
$country = $_POST['country']; 
$phone = $_POST['phone']; 



include('db_connect.php'); 

$stmt = $db_connection->prepare('INSERT INTO tblUser (userID,fName, lName, email, password, addressLine1, suburb, city, country, phone) VALUES(NULL, :f_name, :l_name, :email, :pass, :address1, :suburb, :city, :country, :phone)'); 
$stmt->bindParam(':f_name', $f_name, PDO::PARAM_STR); 
$stmt->bindParam(':l_name', $l_name, PDO::PARAM_STR); 
$stmt->bindParam(':email', $email, PDO::PARAM_STR); 
$stmt->bindParam(':pass', $pass, PDO::PARAM_STR); 
$stmt->bindParam(':address1', $address1, PDO::PARAM_STR); 
//$stmt->bindParam(':address2', $address2, PDO::PARAM_STR); 
$stmt->bindParam(':suburb', $suburb, PDO::PARAM_STR); 
$stmt->bindParam(':city', $city, PDO::PARAM_STR); 
$stmt->bindParam(':country', $country, PDO::PARAM_STR); 
$stmt->bindParam(':phone', $phone, PDO::PARAM_STR); 

try { 
    $stmt->execute(); 
    print_r($stmt); 
    $result = $stmt->fetchAll(); 
} 
catch (Exception $e) { 
    echo $e; 
} 

print_r($ _ POST);的輸出; is:Array([email] => [email protected] [pass] => pass [pass_confirm] => pass [f_name] => fefs [l_name] => sfasafs [address_1] => sfafsa [address_2] => dsfsafsaf [suburb] => dffdsa [city] => dsffdf [country] => sfaafdsa [phone] => fsaafssaf [submit] =>註冊)

問題是數據庫中填充了新記錄,但密碼字段是空白。我刪除了哈希來簡化事情。

下面是用戶表的SQL:

CREATE TABLE IF NOT EXISTS `tbluser` (
    `userID` int(11) NOT NULL AUTO_INCREMENT, 
    `password` varchar(40) NOT NULL, 
    `email` varchar(60) NOT NULL, 
    `addressLine1` varchar(30) DEFAULT NULL, 
    `addressLine2` varchar(30) DEFAULT NULL, 
    `suburb` varchar(30) DEFAULT NULL, 
    `city` varchar(30) DEFAULT NULL, 
    `country` varchar(40) DEFAULT NULL, 
    `phone` varchar(25) DEFAULT NULL, 
    `fName` varchar(30) DEFAULT NULL, 
    `lName` varchar(30) NOT NULL, 
    `admin` tinyint(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`userID`), 
    UNIQUE KEY `email` (`email`), 
    UNIQUE KEY `email_3` (`email`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ; 
+0

密碼字段爲空,如在中,它包含一個空字符串,是否正確? 'print_r($ stmt)'顯示了什麼? – 2009-10-20 02:21:46

+0

它實際上並不顯示SQL查詢: PDOStatement對象([queryString] =>插入tblUser(用戶ID,fName,lName,電子郵件,密碼,地址線1,郊區,城市,國家,電話)VALUES(NULL,:f_name ,:l_name,:電子郵件,:傳球,:地址1,:郊區:城市:國家:電話)) 顯然,值給MySQL和它在爲此做。我曾嘗試設置日誌,但MyQL不會重新啓動。我可能會再試一次。 – 2009-10-20 03:19:13

回答

3

你不發生在db_connect.php任何機會做你定義$pass?如果你這樣做,它會覆蓋你的原始聲明。

+0

解決這個問題的一個簡單方法是將當前存在的所有代碼移動到一個函數中,然後調用該函數...... PHP無法看到沒有全局關鍵字的全局變量(除超球盤)。 – Powerlord 2009-10-20 15:09:53

+0

Oh man,我確定就是這樣。感謝大家的幫助。我可能會把它移到一個函數中。猜猜看,爲了測試目的,mysql密碼是解釋空白密碼字段的空字符串。在那裏,我認爲那部分「工作」並且不在等式中。感謝以太,伯莫斯和詹姆斯先生的幫助。 – 2009-10-20 20:04:58