2015-02-12 77 views
0

我發現很多答案似乎對我沒有用。 當我身邊有變量$消息,$ email和$日期像如何在sql查詢中插入php變量?

'VALUES ('$message', '$email', '$date')'; 

它告訴我撇號

Parse error: syntax error, unexpected '$message' (T_VARIABLE)

當我刪除,我得到這樣的事情無法輸入數據:未知列'字段列表'中的'$ message'。我試着插入

$message = mysql_real_escape_string($message);  
    $email = mysql_real_escape_string($email); 
    $date = mysql_real_escape_string($date); 

與「」周圍的變量,如

'VALUES ("$message", "$email", "$date")'; 

它擺脫了錯誤信息,但現在,而不是從HTML表單的輸入,我得到字面意思是「$ message」在我的數據庫中。

我做錯了什麼? 我的簡單目標只是將電子郵件,消息和日期放入數據庫中。請幫忙!謝謝!

下面是完整的代碼,我有:

 <?php 
if($_POST && isset($_POST['email'], $_POST['essay'])) { 


    $dbhost = 'localhost'; 
    $dbuser = 'root'; 
    $dbpass = 'password'; 

    $conn=mysql_connect($dbhost, $dbuser); 
    if(! $conn) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 

    mysql_select_db("Ink", $conn); 

    date_default_timezone_set("America/New_York"); 
    $message = $_POST['essay']; 
    $email = $_POST['email']; 
    $date = date("y-m-d h:i:sa"); 


    $sql = 'INSERT INTO inktable '. 
      '(writings, email, date) '. 
      'VALUES ('$message', '$email', '$date')'; 

    mysql_select_db('ink'); 
    $retval = mysql_query($sql, $conn); 
    if(! $retval) 
    { 
     die('Could not enter data: ' .mysql_error()); 
    } 

    mysql_close($conn); 
} 
?> 
+0

有沒有人告訴你關於SQL注入? – Biffen 2015-02-12 07:51:49

+0

嘗試 INSERT INTO inktable'。 '(文字,電子郵件,日期)'。 'VALUES('{$ message}','{$ email}','{$ date}')'; 並使用PDO(如果可以的話) – 2015-02-12 07:53:07

+0

使用'mysqli_'而不是'mysql_'。你也可以使用pdo。 Mysql已棄用,並且完全不推薦 – frunkad 2015-02-12 08:21:44

回答

4

我認爲你需要那些小點:

('.$message.', '.$email.', '.$date.')'; 

或者:

("'.$message.'", "'.$email.'", "'.$date.'")'; 
1

而且,最好使用PDO是最簡單的方法來減少我認爲的問題;)使用準備好的語句,可以最大限度地降低SQL注入的風險,如比芬說。

http://php.net/manual/en/ref.pdo-mysql.php

例如,與PDO代碼:

<?php 

if($_POST && isset($_POST['email'], $_POST['essay'])) { 

$dbhost = 'localhost'; 
$dbuser = 'root'; 
$dbpass = 'password'; 
$dbname = 'Ink'; 

date_default_timezone_set("America/New_York"); 

try { 
// Try to connect 
    $dbh = new PDO('mysql:host='.$dbhost.';dbname='.$dbname, $dbuser, $dbpass); 

// Data 
    $message = $_POST['essay']; 
    $email = $_POST['email']; 
    $date = date("y-m-d h:i:sa"); 

// query 
    $sql = "INSERT INTO inktable (message,email,date) VALUES (:message,:email,:date)"; 
    $q = $dbh->prepare($sql); 
    $q->execute(array(':message'=>$message, 
         ':email'=>$email, 
         ':date'=>$date)); 

// Null connection 
    $dbh = null; 
} catch (PDOException $e) { // if exception 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 

?> 
+0

修復它;)第一個代碼沒有檢查,對不起。 ps:麻煩實際上是在這一行:'$ dbh = new PDO('mysql:host ='。$ dbhost。'; dbname ='。$ dbname,$ dbuser,$ dbpass);'注意引號,@jojo -wang – tehcpu 2015-02-12 19:13:06

+0

它的作品謝謝你! – 2015-02-12 19:17:44

+0

歡迎您;) – tehcpu 2015-02-12 19:29:10