2017-07-30 66 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

相关问题