mysqli_query通过变量输入

时间:2013-03-26 16:53:56

标签: php mysql phpmyadmin mysqli

我正在尝试使用以下PHP代码向MySQL表添加信息。 (输入HTML5基本Web表单中的名称和文本。)可能是语法问题?

<?php
include "dbinfo.php"; //contains mysqli_connect information (the $mysqli variable)
//inputs
$name = $_GET["name"];
$text = $_GET["text"];

$sqlqr = 'INSERT INTO `ncool`.`coolbits_table` (`name`, `text`, `date`) VALUES ("$name", "$text", CURRENT_TIMESTAMP);'; //the query. I'm pretty sure that the problem is a syntax one, and is here somewhere.

mysqli_query($mysqli,$sqlqr); //function where the magic happens.
?>

不会抛出任何错误。产生一个空白屏幕,并在MySQL表中添加一行“$ name”和“$ text”。

3 个答案:

答案 0 :(得分:2)

首先:你应该使用mysqli预处理语句来防止SQL注入攻击。 在没有正确转义的情况下在查询中使用用户输入是不安全的。准备好的陈述对于防止这种情况很有用。

第二:你应该学习如何在PHP中使用字符串引用,单引号字符串和双引号字符串是不同的

我建议您阅读有关字符串引用的PHP documentation

答案 1 :(得分:1)

这是代码的外观(添加了SQL注入保护):

<?php
include "dbinfo.php"; //contains mysqli_connect information (the $mysqli variable)
//inputs
$name = mysqli_real_escape_string($_GET['name']);
$text = mysqli_real_escape_string($_GET['text']);

$sqlqr = "INSERT INTO `ncool`.`coolbits_table` (`name`, `text`, `date`) VALUES ('" . $name . "', '" . $text . "', CURRENT_TIMESTAMP);";

mysqli_query($mysqli,$sqlqr); //function where the magic happens.
?>

看看我做了什么。首先,我已经将您正在检索的用户输入转移到$name$text变量中(出于安全原因,这几乎是必须的),并且正如其他人建议您最好使用预准备语句。

问题是你没有用单引号(')来包围字符串值,这是SQL语法的要求。

我希望这有助于回答你的问题。

答案 2 :(得分:-3)

   $sqlqr = 'INSERT INTO `ncool`.`coolbits_table` (`name`, `text`, `date`) VALUES ("'.$name.'", "'.$text.'", CURRENT_TIMESTAMP)';

将你的vars保持在引号之外。