通过在url中传递值来删除数据库

时间:2014-03-06 05:37:57

标签: php mysql sql database

我需要通过在下面的代码中传递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';

我该怎么做?

3 个答案:

答案 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       
   ?>
  1. 数据库名称应为双引号或根本没有引号。例如。 &#34; $ B&#34 ;.单引号将使其实际上为$ b而不是$ b实际代表的值。

  2. 在删除数据库&#39;之后缺少空格,应该删除数据库&#39;

  3. 允许某人在没有首先进行身份验证的情况下删除数据库是不安全的,尤其是使用http get,他们可以指定要删除的任何数据库的名称。我假设这是由config.php处理的。确保为数据库用户分配了正确的权限

  4. 不推荐使用mysql_query,不适用于较新版本的php。您应该使用mysqli进行任何mysql查询。 Mysql 5.6很快就结束了生命。请参阅以下链接了解日期。您可以使用phpinfo()行在您的服务器上运行php的版本;在你的代码中。如果它低于7.x,您应该考虑规划升级路径*

  5. 为了避免在if语句中使用if语句,可以考虑使用case / switch语句。

  6. http://php.net/supported-versions.php

    *升级到更高版本的php可能会破坏为5.6及以下版本编写的应用程序。

答案 2 :(得分:0)

您已跳过else并开始{ echo "Not Success"; };