如何在sql查询中插入php变量


How can I insert php variables in a sql query?

我已经找到了很多答案,但这些答案似乎对我不起作用。当我在变量$message、$email和$date周围使用撇号时,如

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

它告诉我

分析错误:语法错误,意外的"$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);
}
?>

我想你需要那些小点:

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

或者:

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

此外,最好使用PDO,这是我认为最大限度地减少问题的最简单方法;)使用预先准备好的语句,您可以最大限度地降低SQL注入的风险,正如Biffen所说。

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();
}
?>