【问题标题】:Getting error database not selected未选择获取错误数据库
【发布时间】:2012-10-09 15:46:52
【问题描述】:

代码:

<?php
session_start();
$_SESSION['msg'] = "";
$con = mysql_connect('localhost','me','omglol');
mysql_select_db('test',$con);
$q = mysql_query(sprintf("select * from UserTable where (nick=\"%s\") AND (pass=SHA1(\"%s\"))",$_POST['nick'],$_POST['pass']),$con) or die(mysql_error());

这对我来说是正确的。是的,我知道“测试”存在。并包含 UserTable。

首先,感谢您将 php4 添加到我忘记的标签中 :(

根据 Laser_wizard 的建议,我执行了以下操作:(完整代码):

<?php
session_start();
$_SESSION['msg'] = "";
$con = mysql_connect('localhost','me','omglol');
if(!$con)
{
    die("The connection to mysql server is not being made.");
}
$db = 'test';
$selected = mysql_select_db($db,$con);
if(!$selected)
{
    die(sprintf("Cannot use database %s.",$db));
}
//$q = mysql_query(sprintf("select * from UserTable where (nick=\"%s\") AND (pass=SHA1(\"%s\"))",$_POST['nick'],$_POST['pass']),$con) or die(mysql_error());
$q = mysql_query("select * from UserTable",$con) or die("The query statement still isn't working");
$row = mysql_fetch_assoc($q);
$dest=0;
if(mysql_num_rows($q)==0)
{
    //$testn = mysql_query(sprintf("select * from UserTable where nick=(\"%s\")",$_POST['nick']),$con);
        $testn = mysql_query("select * from Category",$con) or die("The 2nd query statement still isn't working");
        if(mysql_num_rows($testn)==0)
        {
               $_SESSION['msg'] = "Nick ".$_POST['nick']." was not found. Check spelling or <a href=\\\"register.php\\\">register</a>";
        }
        else
        {
                $_SESSION['msg'] = "Password incorrect";
        }
        if(isset($_SESSION['attempts']))
        {
                $_SESSION['attempts'] = $_SESSION['attempts'] + 1;
        }
        else
        {
                $_SESSION['attempts'] = 1;
        }
    mysql_free_result($q);
    mysql_free_result($testn);
        mysql_close($con);
    $dest = 'Location:http://cs4.sunyocc.edu/~me/onestopshop/login.php';
}
else
{
        $_SESSION['nick'] = $_POST['nick'];
    $_SESSION['email'] = $row['email'];
    mysql_free_result($q);
    mysql_close($con);
    $dest = 'Location:http://cs4.sunyocc.edu/~me/onestopshop/index.php';
}
header($dest);
exit();
?>

与上述相同的错误。所以设置了 $con 并且 $selected 读取为 true,所以我很困惑接下来要检查什么。我猜 mysql_select_db($db,$con);也不是 $testn 仍然无法正常工作但仍然阅读正确吗?我很困惑下一步该做什么。

【问题讨论】:

  • 那里有一些明确的 SQL 注入漏洞...
  • 可能想在尝试选择数据库或执行查询之前检查$con 的值。 mysql_select_db() 的返回值也是如此。您知道 MySQL 扩展现在已被弃用,对吧?
  • 第一个问题是php4?
  • @Phill:他在 php4 中,所以我想这是他可以使用的唯一扩展。
  • 当我知道如何准确地做到这一点时,我计划返回并添加“转义”我的输入。我希望先让这个工作。是的,它的 php4 :( 我应该提供更多信息抱歉

标签: php mysql php4


【解决方案1】:

输入一些 die 语句来测试连接并确保它正在建立。 除此之外,我会说注释掉您的查询行以查看是否导致问题。

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Not connected : ' . mysql_error());
}

// make foo the current db
$db_selected = mysql_select_db('foo', $link);
if (!$db_selected) {
    die ('Can\'t use foo : ' . mysql_error());
}

【讨论】:

    【解决方案2】:

    如果您的 PHP >= 5.1.0 忘记这些说明并使用 PDO:

    <?php
        $conn = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
        foreach($conn->query('SELECT * from TEST') as $row) {
            print_r($row);
        }
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 2014-03-25
      • 2017-01-30
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多