2014-09-28 113 views
-1

我有這段代碼,我想插入一些值到特定的數據庫。由於某些原因,記錄不會存儲到數據庫中。我有一個想法,我的mysql_query出了問題。無法插入到MySQL數據庫使用PHP,因爲查詢

您認爲可能會導致此問題的可能問題(我已檢查過,它們不影響我的問題): 與數據庫的連接未建立。 變量不包含值。

下面是代碼:

所有的
<?php 
include('includes/connect-db.php'); 

$firstname = mysql_real_escape_string(stripslashes(trim($_POST['firstname']))); 
$surname = mysql_real_escape_string(stripslashes(trim($_POST['surname']))); 
$username = mysql_real_escape_string(stripslashes(trim($_POST['username']))); 
$password = mysql_real_escape_string(stripslashes(trim($_POST['password']))); 
$email = mysql_real_escape_string(stripslashes(trim($_POST['email']))); 
$tel = mysql_real_escape_string(stripslashes(trim($_POST['tel']))); 
$month = mysql_real_escape_string(stripslashes(trim($_POST['month']))); 
$day = mysql_real_escape_string(stripslashes(trim($_POST['day']))); 
$year = mysql_real_escape_string(stripslashes(trim($_POST['year']))); 
$address = mysql_real_escape_string(stripslashes(trim($_POST['address']))); 
$postcode = mysql_real_escape_string(stripslashes(trim($_POST['postcode']))); 
$city = mysql_real_escape_string(stripslashes(trim($_POST['city']))); 
$country = mysql_real_escape_string(stripslashes(trim($_POST['country']))); 

if(isset($_POST['submit_register'])) { 


    if(!empty($firstname) && !empty($surname) && !empty($username) && !empty($password) && !empty($email) && !empty($tel) && !empty($month) && 
    !empty($day) && !empty($year) && !empty($address) && !empty($city) && !empty($country)) { 

    mysql_query("INSERT INTO customers (firstname, surname, username, password, email, tel, month, day, year, address, city, country) 
    VALUES ('$firstname','$surname','$username','$password', '$email', '$tel', '$month', '$day','$year','$address','$postcode','$city','$country')"); 
    echo'success'; 
    } 
    else{ 
    echo'failure'; 
    } 

} 


?> 
+0

當你運行代碼時,它是否回顯成功或失敗? – Doon 2014-09-28 12:56:31

+0

它回聲的成功 – totovic 2014-09-28 12:56:55

+0

您不檢查'mysql_query'的結果。如果發生錯誤,它會返回'false',之後您還可以獲取[錯誤消息(http://php.net/manual/en/function.mysql-error.php)。你可以在這裏查看[mysql_query'上的文檔](http://php.net/manual/en/function.mysql-query.php)。另外請確保閱讀頁面頂部的那個大紅色框,表示您不應該再使用此功能。 – GolezTrol 2014-09-28 13:00:22

回答

1

首先,你不應該使用的mysql_query因爲這擴展不贊成PHP 5.5.0的,並會在將來被移除。相反,請使用MySQLiPDO_MySQL擴展名。

關於您的代碼,您已經忘記在SQL查詢中添加郵編列類型。

mysql_query("INSERT INTO customers (firstname, surname, username, password, email, tel, month, day, year, address, postcode, city, country) 
VALUES ('$firstname','$surname','$username','$password', '$email', '$tel', '$month', '$day','$year','$address','$postcode','$city','$country')"); 

如果不工作,然後檢查是否有任何您想保存到數據庫中的變量的缺失,如果他們然後給他們一個空值。

例如:

if (isset($_POST['firstname'])) { 
    $firstname = mysql_real_escape_string(stripslashes(trim($_POST['firstname']))); 
} else { 
    $firstname = ''; 
} 

或者您可以使用 「ternary operator」:

$firstname = isset($_POST['firstname']) ? mysql_real_escape_string(stripslashes(trim($_POST['firstname']))) : ''; 

這樣做對所有的變量,然後嘗試運行查詢。

+0

我現在已添加郵編列 - 它仍然不插入記錄 – totovic 2014-09-28 13:00:51

+0

我編輯了我的答案。爲您要存儲的每個變量添加一條if語句。如果爲空,則將其等於「」。如果它幫助你,請接受它。:) – consuela 2014-09-28 13:12:05

0

我通常會在這種情況下做什麼,我將我的sql查詢語句複製到mysql終端。 我嘗試在那裏的代碼,以查找它是否運行沒有任何問題。 如果沒有,那麼mysql會引發錯誤。 如果它那麼我通常使用sprintf函數格式化查詢。 事情是這樣的:

if(!empty($firstname) && !empty($surname) && !empty($username) && !empty($password) && !empty($email) && !empty($tel) && !empty($month) && 
!empty($day) && !empty($year) && !empty($address) && !empty($city) && !empty($country)) { 

    $query = sprintf('INSERT INTO customers (firstname, surname, username, password, email, tel, month, day, year, address, city, country) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)',$firstname,$surname,$username,$password,$email,$tel,$month,$day,$year,$address,$postcode,$city,$country); 

    $result = mysql_query($query); 

    if($result){ 
     echo 'Success'; 
    }else{ 
     echo 'Failure'; 
    } 
} 

使用sprintf函數時,%s是一個字符串的佔位符。其中有幾個。檢查PHP文檔。