PHP MySQLI未插入变量

PHP MySQLI未插入变量,php,mysqli,Php,Mysqli,我正在尝试使用用户输入创建一个数据库,问题是,虽然我认为查询是正确的,但如果我尝试不使用变量,但自己输入数据库名称,则不会创建任何新的数据库。它可以工作,但使用变量则不会 <?php $con = mysqli_connect("localhost","root",""); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } else{

我正在尝试使用用户输入创建一个数据库,问题是,虽然我认为查询是正确的,但如果我尝试不使用变量,但自己输入数据库名称,则不会创建任何新的数据库。它可以工作,但使用变量则不会

<?php

$con = mysqli_connect("localhost","root","");

if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
  else{

      echo "Connected successfuly";
  }

$postResult = $_POST[dbname];
echo $postResult;

$runSql = $con->query("CREATE DATABASE".$postResult."");

?>

下面的解决方案解决了我的问题

<?php

$con = mysqli_connect("localhost","root","");

if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
  else{

      echo "Connected successfuly";
  }

$postResult = $_POST['dbname'];
echo $postResult;

$safeString = $con->real_escape_string($postResult);

$runSql = $con->query("CREATE DATABASE ".$safeString."");

printf("Errormessage: %s\n", $con->error);
?>

从中删除空格

$runSql = $con->query("CREATE DATABASE".$postResult."");
数据库是一个已注册的关键字。另外,除非您实际引用的是使用

define('var', 'my var');
因此,您的最终代码应该如下所示:

$postResult = $_POST['dbname'];
echo $postResult;

$runSql = $con->query("CREATE DATABASE ".$postResult."");

只需像这样重新编写$con->query(“创建数据库$postResult”);您忘记了
CREATE DATABASE
和通过变量注入的名称之间有一个空格(空白字符)。因此,语句
createdatabasesomename
是无效的sql。它必须是
创建数据库somename
。还要注意验证/转义从客户端移交的所有数据。您不能信任该数据,因为您无法控制客户端,因此数据可能是经过专门操纵或精心编制的,目的是诱使您的服务器遭受sql注入攻击。请阅读“准备好的语句”和“参数绑定”的优点。尝试过这个建议,但没有任何更改。在这种情况下,请检查指定了什么名称。如果它包含除小写字母以外的任何内容,您必须将其转义(如上所述),或者最好不要授予它。您也可以尝试将其放在backticks(
`
)中,但这被认为是不好的样式。尝试了此解决方案,但它没有帮助您获得与之前相同的SQL语法错误;检查与MySQL服务器版本相对应的手册,了解第1行“4”附近使用的正确语法,这4是从哪里来的?我怀疑
$\u POST['dbname']
。在尝试查询数据库之前。使用
var_dump(“创建数据库”。$postreult.”)您将能够查看完整的查询以检测错误。在这里发布--编辑问题