2017-07-30 52 views
0

因此,我已經完成了一個問答網站的構建,現在正試圖防禦SQL注入,但是CURRENT_DATE有問題。我想將當前的日期與問題插入到數據庫中,但是綁定標記是什麼? 「s」字符串不工作?使用mysqli預處理語句時,CURRENT_DATE的查詢綁定標記是什麼?

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "questions87"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
session_start(); 
$question = $_POST["question"]; 


$uname = $_SESSION['username']; 

$qa_email =$_SESSION['email']; 

// prepare and bind 
$stmt = $conn->prepare("INSERT INTO login (username, username, q_date, qa_email) VALUES (?, ?, ?, ?)"); 
$stmt->bind_param("ssss", $question, $uname, CURRENT_DATE, $qa_email); 



$stmt->execute(); 

if ($stmt) {echo "Thank you ". $uname . " Your question has been submitted " . "<br>";} 
else {echo "Error: " . $sql . "<br>" . mysqli_error($conn);} 


$stmt->close(); 
$conn->close(); 
?> 
+0

只是爲了解釋.. PHP知道你傳遞了一個從未定義的常量。如果你想使用像'$ someDate = date('Y-m-d H:i:s',time())'這樣的php函數插入一個日期(時間),''你確實需要使用's'。 – Yolo

回答

2

使用簡單的MySQL函數NOW()和刪除佔位符q_date

$stmt = $conn->prepare("INSERT INTO login (username, username, q_date, qa_email) VALUES (?, ?, NOW(), ?)"); 
$stmt->bind_param("sss", $question, $uname, $qa_email); 

順便說一句,我注意到,你在這個查詢字段username兩次。我想其中一個出現應該被其他領域所取代。

+0

謝謝我認爲你是對的,但任何想法,當我運行它時爲什麼會出現這個錯誤? 「致命錯誤:未捕獲錯誤:調用/Applications/XAMPP/xamppfiles/htdocs/ask/subq.php:24中布爾型的成員函數bind_param()堆棧跟蹤:#/ {main}拋出/ Applications/XAMPP/xamppfiles第24行「/htdocs/ask/subq.php」第24行是:$ stmt-> bind_param(「sss」,$ question,$ uname,$ qa_email); – do734

+0

發生這種情況是因爲'prepare'未能準備查詢。使用['mysqil_error'](http://php.net/manual/en/mysqli.error.php)獲取詳細錯誤文本。 –

+0

@ do734這是一個不同的錯誤。如果有人幫助你解決你發佈的問題,請先給這個人信用。無論如何,你看到的可能是因爲'$ conn-> prepare'失敗了,所以'$ stmt'是'FALSE'而不是一個準備好的語句。在使用'$ stmt'之前檢查錯誤並查看錯誤細節。 'if(!$ stmt)die(mysqli_error($ conn))' – BeetleJuice

相關問題