簡體   English   中英

如何在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")';

它擺脫了錯誤消息,但是現在,我從數據庫中獲取了字面上的“ $ message”,而不是html表單的輸入。

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

這是我擁有的完整代碼:

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

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM