Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中解析SQL查询字符串_Php_Sql - Fatal编程技术网

如何在PHP中解析SQL查询字符串

如何在PHP中解析SQL查询字符串,php,sql,Php,Sql,我试图用一个简单的查询更新数据库中的一些值,但我无法使与date函数相关的查询正常工作 $update_issued = "UPDATE books SET isIssued = 0 WHERE bookId =" . $_GET["bookid"]; //This one works $update_date = "UPDATE loans SET returnDate = " . date("F j, Y, g:i a") . " WHERE bookId = " . $_GET["book

我试图用一个简单的查询更新数据库中的一些值,但我无法使与
date
函数相关的查询正常工作

$update_issued = "UPDATE books SET isIssued = 0 WHERE bookId =" . $_GET["bookid"]; //This one works
$update_date = "UPDATE loans SET returnDate = " . date("F j, Y, g:i a") . " WHERE bookId = " . $_GET["bookid"]; //This one does not
mysqli_query($db, $update_issued, $update_date);

所以,我想问题出在哪里。DB上的returnDate列需要一个varchar值,新值必须像字符串一样用引号括起来。我试着在提问前附上它,但把引号放错了地方

应该是这样的:

$update\u date=“更新贷款设置返回日期=”。日期(“F j,Y,g:i a”)。“'WHERE bookId=“$_获取[“bookid”]//这一个没有

因此,date函数返回的值将用单引号括起来,就像您所做的那样:


UPDATE loans SET returnDate='20.11.2019 22:33`WHERE bookId=“.$\u GET[“bookId”];

要将参数传递给查询,请使用准备好的语句以防止SQL注入攻击

$update_date = mysql_prepare($db, "UPDATE loans SET returnDate = ? WHERE bookId = ?");
mysqli_stmt_bind_param($update_date, 'si',  date("F j, Y, g:i a"), $_GET["bookid"]);
mysqli_stmt_execute($update_date);
通过这样做,可以防止攻击者传递可能导致系统执行不必要操作的字符串;如果攻击者在
?bookid
中传递了
0或1=1
,则您的查询将影响所有行



作为一个次要方面,使用面向对象的样式调用
$db->prepare
比调用
mysqli_prepare($db…
;更好的是使用PDO层。

请使用prepared语句。日期必须用单引号括起来。但是如果
bookid
是“5”,情况会更好;drop table books“我知道这是不安全的,很容易被利用,但我正在尝试在构建安全的东西之前学习基础知识。这基本上是一个爱好者项目,不会被其他人使用。准备好的语句是“基础知识”。“不要找借口以错误的方式做事。还要确保数据库列的类型正确。正确的
DATETIME
列将不接受此日期格式。请不要使用连接来生成查询。