2015-02-12 102 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