【问题标题】:Dropping database in by passing values in url通过在 url 中传递值来删除数据库
【发布时间】:2014-04-08 14:00:10
【问题描述】:

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

我该怎么做?

【问题讨论】:

  • databsae 这是打字错误吗?
  • 是的,这是一个打字错误,我编辑了它

标签: php mysql sql database


【解决方案1】:

你忘了加空格..单引号下的变量也不会被解析。

正确的做法...

$sql = "drop database ".$db;
                     ^------ Here

【讨论】:

  • 我留下了同样的错误删除数据库时出错:无法删除数据库'$b';数据库不存在 不成功
  • @Stackerman,您是否删除了$db 周围的引号,如图所示。 ?
  • 感谢我删除了 $db 周围的引号,它可以正常工作数据库测试已成功删除 我正在为你的答案投票,你应该为我的问题投票 因为我的问题和你的回答都是有效的
【解决方案2】:
   <?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. 数据库名称应使用双引号或根本不使用引号。例如。 “$b”。单引号将使其字面意义上的 $b 而不是 $b 实际代表的值。

  2. “drop database”后面少了一个空格,应该是“drop database”

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

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

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多