我需要通过在下面的代码中传递a和b的值来删除数据库
我已将a的值设置为5用于第一级测试,b用于设置数据库名称
即,index.php?a = 5& b = test
<?php
include ('config.php');
$a=$_GET["a"];
$b=$_GET["b"];
if ($a==5)
{
$sql = 'drop database'.'$db';
if (mysql_query($sql))
{
echo "Database test was successfully dropped\n";
}
else
{
echo 'Error dropping database: ' . mysql_error() . "\n";
}
}
{
echo "Not Success";
}
?>
我收到了错误
Error dropping database: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'databasee$db' at line 1 Not Success
我知道我不能通过php中的mysql查询删除数据库
Error Dropping Database (Can't rmdir '.test\', errno: 17)
错误是通过在代码
中包含数据库名称$sql='drop database'.'$b';
我该怎么做?
答案 0 :(得分:3)
您忘了添加空格..此单引号下的变量也不会被解析。
正确的做法......
$sql = "drop database ".$db;
^------ Here
答案 1 :(得分:1)
<?php
//connect to the database and authenticate the user
include ('config.php');
$a=$_GET["a"];
$b=$_GET["b"];
if ($a==5)
{
$sql = 'drop database '."$b";
if (mysqli_query($sql))
{
echo "Database test was successfully dropped\n";
}
else
{
echo 'Error dropping database: ' . mysql_error() . "\n";
echo "Not Success";
}//End if/else error dropping database
}//End if $a==5
?>
数据库名称应为双引号或根本没有引号。例如。 &#34; $ B&#34 ;.单引号将使其实际上为$ b而不是$ b实际代表的值。
在删除数据库&#39;之后缺少空格,应该删除数据库&#39;
允许某人在没有首先进行身份验证的情况下删除数据库是不安全的,尤其是使用http get,他们可以指定要删除的任何数据库的名称。我假设这是由config.php处理的。确保为数据库用户分配了正确的权限
不推荐使用mysql_query,不适用于较新版本的php。您应该使用mysqli进行任何mysql查询。 Mysql 5.6很快就结束了生命。请参阅以下链接了解日期。您可以使用phpinfo()行在您的服务器上运行php的版本;在你的代码中。如果它低于7.x,您应该考虑规划升级路径*
为了避免在if语句中使用if语句,可以考虑使用case / switch语句。
http://php.net/supported-versions.php
*升级到更高版本的php可能会破坏为5.6及以下版本编写的应用程序。
答案 2 :(得分:0)
您已跳过else
并开始{ echo "Not Success"; };