为什么我得到“mysql_query():提供的参数不是有效的”

时间:2010-03-09 01:44:41

标签: php

为什么我得到一个“mysql_query():提供的参数不是第一个有效的...”

$r = mysql_query($q, $connection);

在以下代码中......

$bId    = trim($_POST['bId']);
$title  = trim($_POST['title']);
$story  = trim($_POST['story']);

$q  = "SELECT * ";
$q .= "FROM " . DB_NAME . ".`blog` ";
$q .= "WHERE `blog`.`id` = {$bId}";
$r = mysql_query($q, $connection);
//confirm_query($r);
if (mysql_num_rows($r) == 1) {      
    $q  = "UPDATE " . DB_NAME . ".`blog` SET
                        `title` = '{$title}',
                        `story` = '{$story}'
                    WHERE `id` = {$bId}";
    $r = mysql_query($q, $connection);
    if (mysql_affected_rows() == 1) {
        //Successful
        $data['success'] = true;
        $date['errors']  = false;
        $date['message'] = "You are the Greatest!";
    } else {
        //Fail
        $data['success'] = false;
        $data['error']   = true;
        $date['message'] = "You can't do it fool!";
    }        
}

我也得到一个“mysql_num_rows():提供的参数也不是一个有效的MySQL结果资源”错误。

附注:我正在使用1& 1 Hosting(最糟糕的托管),带有一行文本的自定义.htaccess文件,以启用PHP 5.2(仅限1& 1主机方式)。


在发布问题后添加额外的内容...

以下是$ connection的定义方式。它位于自己的页面上,名为connection.php,使用require_once函数调用。它在每个需要数据库连接的页面上调用,包括有问题的...

$connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
    if (!$connection) {
        die("Database Connection Failed: </br>" . mysql_error());
    }
    $db_select = mysql_select_db(DB_NAME,$connection);
    if (!$db_select) {
        die("Database Selection Failed: </br>" . mysql_error());
    }

...我知道它正在工作,因为这与我用于我所拥有的页面的连接相同,并且我没有遇到任何问题。我还没有在我的家庭服务器上进行测试,但我稍后会看看它是否与1&amp; 1主机问题有关。

更新:我正在从1&amp; 1 Hosting迁移到HostMoster。 1&amp; 1运行PHP作为CGI并运行PHP4而不是PHP5(您可以创建自定义.htaccess文件以使其运行PHP5)。我稍后会更新你。

4 个答案:

答案 0 :(得分:2)

第一个是因为它不是连接,第二个是因为它不是查询结果,因为它不是连接。使用mysql_error()找出连接中出错的地方。

答案 1 :(得分:0)

我的猜测是$connection未正确打开。你应该有一行:

$connection = mysql_error($server, $user, $pass);

同时检查mysql_error()以查看失败的原因。

答案 2 :(得分:0)

我认为,在您尝试执行mysql_error()之前,您需要建议您使用mysql_connect()代替mysql_query()。它可能看起来像这样(除了1and1可能已经为您的数据库提供了一个特定的主机名,您应该使用它来代替下面的localhost):

//Make sure this goes before any of your other mysql_* functions
$connection = mysql_connect('localhost', 'yourUserName', 'yourPassword');

除非您正在使用多个数据库连接同时打开并且需要确保在进行查询调用时区分这两个数据库连接,否则不必为每个查询传递$connection。否则,mysql_query假定您使用的是您连接的最后一个数据库。

此外,出于安全目的,如Frank所述,您应该使用mysql_real_escape_string(),如下所示:

$q  = "SELECT * ";
$q .= "FROM " . DB_NAME . ".`blog` ";
$q .= "WHERE `blog`.`id` = ".mysql_real_escape_string($bId).";

答案 3 :(得分:0)

在我的本地系统上测试(通过WAMP),我没有遇到任何问题。当我遇到问题时,我正在使用1&amp; 1 Hosting。 1&amp; 1托管运行PHP作为CGI,这可能会导致我的问题。我无法用1&amp; 1处理所有废话并切换到HostMonster。现在,我没有任何问题。另外,我宁愿在1&amp; 1的管理面板上使用cPanel。