2016-03-09 45 views
0

可能有人請xplain我爲什麼這個代碼中插入一本新書到我的數據庫得到這個錯誤:奇怪的錯誤試圖插入一行到DB

ERROR: Could not able to execute INSERT INTO books (Email, Name, Price) VALUES ([email protected], Jack turell's guide to life, $100). You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '@mail.yu.edu, Jack turell's guide to life, $100)' at line 2

session_start(); 
$book = $_POST["book"]; 
//$condition = $_PST["condition"]; 
$price = $_POST["price"]; 
$email = $_SESSION["email"]; 

    $book = $link->real_escape_string($book); 
    $price = $link->real_escape_string($price); 
    $email = $link->real_escape_string($email); 

    // Create connection 
    $link = mysqli_connect($servername, $username, $password, $dbname); 
    // Check connection 
    if($link === false){ 
    die("ERROR: Could not connect. " . mysqli_connect_error()); 
    } 


    if($email===null){ 
     header("Location: http://yutradecircle.com/index.html"); 
    } 
    else{ 
     $sql = "INSERT INTO books (Email, Name, Price) 
     VALUES ('{$email}', '{$book}', '{$price}')"; 

    if (mysqli_query($link, $sql)) { 
     echo "New record created successfully</br><a   href='tradecircle.php'>Home</a>"; 
     } else { 
      echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
     } 

    } 
    mysqli_close($link); 
+0

字符串值需要單引號。 –

+0

如果您的問題是解決善意接受最好的答案並將其標記爲已接受http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – devpro

回答

1

您需要的值添加引號,並根據需要逃避這些變量第一,以及因爲名字中有報價的錯誤。

$book = $link->real_escape_string($book); 
$email = $link->real_escape_string($email); 
$price = $link->real_escape_string($price); 

然後:

$sql = "INSERT INTO books (Email, Name, Price) VALUES ('$email', '$book', '$price')"; 

在一般建築琴絃一樣,是一個安全問題。檢查PDO並使用它或類似的庫來構建插入,以防止SQL注入。

+0

我添加了兩個建議,但它仍然不工作。我檢查我的錯誤日誌,這是新的錯誤:PHP致命錯誤:調用第8行上的/home/ypemgm/public_html/yutradecircle.com/addBook.php中的非對象上的成員函數real_escape_string() 8-10是你的三行建議。 – KosherHMM

+0

用你的代碼看起來像現在更新你的問題,我可以看看。 – MajicBob

+0

此外,我一直提到這兩個其他錯誤,其中提到pdo sqlite看看這個。 PHP警告:無法加載模塊'pdo_sqlite',因爲所需模塊'pdo'未被加載到未知的行0 – KosherHMM

0

您需要使用字符串引號值:

$sql = "INSERT INTO books (Email, Name, Price) VALUES ('$email', '$book', '$price')";