我正在尝试制作几个文本框,一旦提交另一个php将连接让我们说它是database.php然后database.php会将文本框中的内容插入到mysql数据库表中但是我不知道如何我应该进入mysqli_query代码....我现在拥有的是
mysqli_query($db,"INSERT INTO jliu VALUE(null,$_GET['title'],$_GET['fname'],$_GET['lname'],$_GET['description'])");
当然$ _GET将无法正常工作。我无法确定如何正确使用它。
有人可以帮我一把吗?感谢
答案 0 :(得分:2)
您需要突破字符串才能将其与$_GET
变量连接起来。
mysqli_query($db,"INSERT INTO jliu VALUES(null,".$_GET['title'].",".$_GET['fname'].",".$_GET['lname'].",".$_GET['description'].")");
但实际上你应该调查prepared statements以避免上面的SQL注入安全漏洞。
使用预准备语句,您可以将$_GET
变量绑定到查询中的参数。
$stmt = mysqli_prepare($db,"INSERT INTO jliu VALUES(null, ?, ?, ?, ?");
mysqli_stmt_bind_param($stmt, "s", $_GET['title']);
...
// and the same for the others
链接手册页中有关于如何执行预准备语句并返回结果的更多细节。
答案 1 :(得分:2)
请不要使用mysql_query()和consorts,它们是way too unsafe。请查看PDO并使用它。具体来说,PDO :: prepare()和PDOStatement :: execute()将是您的解决方案。
答案 2 :(得分:2)
您的实际问题,将数组的索引值插入字符串可以通过两种方式解决(如果计算heredoc,sprintf等等,则更多):
使用花括号:
"INSERT INTO jliu VALUE(null, {$_GET['title']}, {$_GET['fname']}, {$_GET['lname']}, {$_GET['description']})"
使用连接:
"INSERT INTO jliu VALUE(null, " . $_GET['title'] . ", " . $_GET['fname'] . ", " . $_GET['lname'] . ", " . $_GET['description'] . ")"
然而,最重要的问题是不应该这样做。使用您的代码,您对SQL注入漏洞持开放态度。
使用prepared statements,然后在那里插入您的值。这会创建一个更安全(并且性能更高)的查询,因为您只绑定值,而不是更改实际查询本身。代码示例:
if ($stmt = $mysqli->prepare("INSERT INTO jliu VALUES (NULL, ?, ?, ?, ?)")) {
$stmt->bind_param("ssss", $_GET['title'], $_GET['fname'], $_GET['lname'], $_GET['description']);
$stmt->execute();
}
答案 3 :(得分:1)
您必须使用预准备语句并用占位符替换变量。
答案 4 :(得分:0)
试试这个..
$title = mysqli_real_escape_string($_GET['title']);
$fname = mysqli_real_escape_string($_GET['fname']);
$lname = mysqli_real_escape_string($_GET['lname']);
$description = mysqli_real_escape_string($_GET['description']);
$stmt = mysqli_prepare($db,"INSERT INTO jliu VALUES(null,'".$title."','".$fname."','".$lname."','".$description."'");
mysqli_stmt_execute($stmt);
答案 5 :(得分:0)
回答你的问题:
您可以执行以下操作。实际上,这是将数组项的变量放入字符串中,而不仅仅是$_GET
。可以像这样访问任何数组:
$str = "some text {$_GET['title']}"
使用对象时的类似方法:
$str = "some text {$obj->test}"
但是,当你使用sql查询时,这是个坏主意。您应该使用一些函数来清除输入,以防止sql注入。
最直接的方法是使用mysqli_real_escape_string:
$str = "some text " . mysqli_real_escape_string($_GET['title'])." ...";
或者您可以使用更灵活的prepared statements
答案 6 :(得分:0)
应该是这样的。
$query = sprintf("INSERT INTO jliu VALUE(null,%s,%s,%s,%s)",$_GET['title'],$_GET['fname'],$_GET['lname'],$_GET['description']);
mysqli_query($db,$query);