2013-11-26 66 views
0

我想讓我的查詢工作,我似乎無法找到它有什麼問題。這是從一個順便說一句。我的mySQL查詢出了什麼問題?

//Connection 
$dbhandle = mysql_connect($hostname, $username, $password) or die("Unable to connect."); 
$selected = mysql_select_db("fblaWebsite",$dbhandle) or die("Could not select the database"); 

//execute the SQL query 
     $insertQuery = "INSERT INTO Bookings (band, occasion, placeName, address, city, state, email, firstName, lastName, comments, ticketsForSale, phoneNumber, ticketPrice, date, time) 
     VALUES ('$band', '$occasion', '$placeName', '$address', '$city', '$state', '$email', '$firstName', '$lastName', '$comments', '$ticketsForSale', '$phoneNumber', '$ticketPrice', '$date', '$time')"; 
     if(mysql_query($insertQuery)){ 
      echo "Form Successfully Submited!"; 
     } 
     else{ 
      echo "Error Submiting Form!"; 
     } 

我似乎無法找到錯誤。我只是不斷收到「錯誤提交表單!」

+3

爲此調查PDO。說真的,它會容易得多。 –

+0

是啊PDO真的是要走的路 - (PHP數據對象) - http://php.net/manual/en/book.pdo.php – dudewad

+0

正如@JustinE所說,PDO更適合這些查詢。但是,爲了找到你的錯誤,你可以在'if'之前加上:'die($ insertQuery);'讓我們知道打印的內容。 –

回答

1

下面的代碼應該讓你開始連接到PDO,並執行一個簡單的插入查詢,就像你的例子一樣。

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password'); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

try { 
    //connect as appropriate as above 
    $stmt = $db->prepare("INSERT INTO Bookings (band, occasion, placeName, address, city, state, email,  firstName, lastName, comments, ticketsForSale, phoneNumber, ticketPrice, date, time)  Values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?"); 
    $stmt->execute(array($band, $occasion, $placeName, $address, $city, $state, $email, $firstName, $lastName,  $comments, $ticketsForSale, $phoneNumber, $ticketPrice, $date, $time)); 
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
} catch(PDOException $ex) { 
    echo "An Error occured!"; //user friendly message 
    //The line below will echo the error message from the query if there is one. 
    //echo $ex->getMessage(); 
} 
2

正如其他人所建議的,PDO對此非常有幫助。

但是,由於您的問題沒有使用PDO,而且我也沒有看到變量的值,所以我建議您在其他情況下調用mysql_error(),並將其輸出到屏幕上(僅在開發中! )以查看MySQL最新的錯誤是什麼。

這會給你一個解決你的特定問題的出發點。

我還建議您確保清理輸入值,並確保沒有有害值被替換到您的sql語句中。如果您不使用它,我可以推薦mysql_escape_string

請記住,vanilla mysql驅動程序將在5.5中被棄用。認真考慮升級到MySQLi或PDO,以避免在PHP 5.5環境中破壞您的代碼!

這裏是PHP對已過時的常見問題和不斷變化的新機制之一:Why is the MySQL extension (ext/mysql) that I've been using for over 10 years discouraged from use? Is it deprecated? What do I use instead? How can I migrate?

+0

所有mysql_ *函數都被棄用。他需要考慮現在更新到PDO或MySQLi。 –

+0

是的,它們在5.5.0中被棄用(我們現在的版本是5.5.6,因此當前已被棄用)我認爲我指出了切換的必要性,甚至將OP關聯到FAQ。我不僅告訴他們如何在PDO中對它進行修復,這個事實給我帶來了不滿。我認爲他們現在可能想要修復它,並將其遷移到PDO/MySQLi,作爲他們下一輪改進的一部分......所以我指出瞭如何獲得有關其當前環境和設置的更多信息。 –

+0

我沒有downvote任何東西。 –

1

你不需要PDO得到答案。只要使用這樣的東西。使用它進行測試,它會告訴你一個錯誤的位置。

$result = mysql_query($query) or die("Bad query 1: " .mysql_error()); 

現在...觀看我得到多少票,因爲你不需要PDO。

您也可以在程序代碼中使用prepared statements。學習這種方法是一個不錯的主意,否則你將會永遠回到數十種不同的方式來防止sql注入。

編輯:

我忘了說,你應該將到mysqli聲明和從舊遠貶值mysql語句。有可能你發現的例子是10歲。學習php和sql是一種發現的旅程,如果你走錯了腳步,它會有所幫助。我會看看這個例子。 http://us1.php.net/manual/en/mysqli.query.php

編輯:

丹尼斯指出,你應該學會Mysqli Prepared Statements代替。在這個時候這將是一個非常聰明的選擇,你仍然可以使用程序代碼。很多關於如何做到這些的Stackoverflow示例。 mysqli_stmt_fetch returns number