2

我正在尝试制作几个文本框,并在提交时连接另一个 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 将无法正常工作。我真的不知道如何正确获得它。

4

7 回答 7

2

请不要使用 mysql_query() 和 consorts,它们太不安全了。请查看PDO并改用它。具体来说 PDO::prepare() 和 PDOStatement::execute() 将是您的解决方案。

于 2013-03-26T09:40:46.710 回答
2

您需要断开字符串以便将其与$_GET变量连接起来。

mysqli_query($db,"INSERT INTO jliu VALUES(null,".$_GET['title'].",".$_GET['fname'].",".$_GET['lname'].",".$_GET['description'].")");

但实际上,您应该查看准备好的语句以避免上面的 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

链接的手册页中有更多关于如何执行准备好的语句并返回结果的详细信息。

于 2013-03-26T09:37:53.760 回答
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 注入漏洞的影响。

使用准备好的语句,并在其中插入您的值。这会创建一个更安全(并且性能略高)的查询,因为您只是绑定values,而不是更改实际查询本身。代码示例:

if ($stmt = $mysqli->prepare("INSERT INTO jliu VALUES (NULL, ?, ?, ?, ?)")) {
    $stmt->bind_param("ssss", $_GET['title'], $_GET['fname'], $_GET['lname'], $_GET['description']);

    $stmt->execute();
}
于 2013-03-26T09:44:00.287 回答
1

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

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

于 2013-03-26T09:38:29.817 回答
-2

尝试这个..

    $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);
于 2013-03-26T09:40:14.113 回答
-2

应该是这样的。

$query = sprintf("INSERT INTO jliu VALUE(null,%s,%s,%s,%s)",$_GET['title'],$_GET['fname'],$_GET['lname'],$_GET['description']);
mysqli_query($db,$query);
于 2013-03-26T10:20:42.853 回答
-2

回答你的问题:

您可以执行以下操作。其实就是把数组item的一个变量放到一个字符串中,而不仅仅是for $_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'])." ...";

或者您可以使用更灵活的准备好的语句

于 2013-03-26T09:42:13.703 回答