如何在mysqli_query中使用$ _GET?

时间:2013-03-26 09:35:20

标签: php mysql forms insert

我正在尝试制作几个文本框,一旦提交另一个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将无法正常工作。我无法确定如何正确使用它。

有人可以帮我一把吗?感谢

7 个答案:

答案 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)

您必须使用预准备语句并用占位符替换变量。

http://php.net/manual/de/mysqli.prepare.php

答案 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);