Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我会得到;mysql_query():提供的参数不是有效的";_Php - Fatal编程技术网

Php 为什么我会得到;mysql_query():提供的参数不是有效的";

Php 为什么我会得到;mysql_query():提供的参数不是有效的";,php,Php,为什么我会得到第一个“mysql\u 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 `b

为什么我会得到第一个“mysql\u 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\u num\u rows():提供的参数不是有效的mysql结果资源”错误

旁注:我正在使用1&1托管(有史以来最差的托管)、带有一行文本的自定义.htaccess文件来启用PHP5.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());
    }
$connection=mysql\u connect(DB\u服务器、DB\u用户、DB\u密码);
如果(!$connection){
die(“数据库连接失败:
”.mysql_error()); } $db\u select=mysql\u select\u db(db\u NAME,$connection); 如果(!$db\u选择){ die(“数据库选择失败:
”.mysql_error()); }
。。。我知道它正在工作,因为这是我在页面上使用的相同连接,我没有任何问题。我还没有在我的家庭服务器上进行测试,但我将稍后查看它是否与1&1托管问题有关


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

我猜,
$connection
未正确打开。你应该有这样一行:

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

还要检查失败的原因。

第一个原因是因为它不是连接,第二个原因是因为它不是查询结果,因为它不是连接。用于找出连接中出现的错误。

我认为cletus的意思是建议您在尝试执行
mysql\u查询()之前,需要使用一个而不是
mysql\u error()
。它可能是这样的(除了1和1可能为您的数据库提供了一个特定的主机名,您应该使用它来代替下面的
localhost
):

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

此外,出于Frank提到的安全目的,您应该使用
mysql\u real\u escape\u string()
如下所示:

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

在我的本地系统上测试(通过WAMP),我没有问题。当我遇到问题时,我正在使用1&1托管。1&1主机将PHP作为CGI运行,这可能会导致我的问题。我不能用1和1处理所有的垃圾,然后切换到HostMonster。现在,我没有任何问题。另外,我宁愿在1&1的管理面板上使用cPanel。

看起来sql注入易受攻击。使用mysql\u real\u Escape\u string()或使用参数化查询来转义参数。我确实。。。你在这里看不到它,因为我把它从这里剥离出来,这样我就可以让它简单地阅读。我有一个函数,可以自动检查“mysql\u real\u escape\u string”是否有效。如果它是有效的,那么它将检查“get\U magic\U quotes\U gpc”是否处于活动状态。如果是这样,那么它将去掉斜杠并使用“get_magic_quotes_gpc”。如果没有,则只使用“get_magic_quotes_gpc”。最后,如果get_magic_quotes_gpc和$magic_quotes_active无效或启用,则只添加斜杠。我从Kevin Shoglund那里得到了这个函数,Kevin Shoglund是Lynda.com上几个视频的作者。你可能是对的,因为我的其他一些用户定义函数也不起作用。在我发布代码之前,我把它们剥去了。在使用jQuery AJAX时,是否可以使用require_once()函数连接另一个页面(如functions.php)?意思一个页面将由ajax发布到另一个页面,这需要另外4个具有预定义功能的页面,该页面将返回数据。ajax只是向web服务器发起另一个请求。它与浏览器的正常点击之间并没有太大区别。如果是这样,那么我定义了var$connection。这是我在所有页面上使用的同一个帐户。在我的问题中,我添加了定义$connection的代码。您创建的
$connection
失败。找出原因。看看上面我发布的代码。我没有数据库错误。我已经用
$connection
变量更新了我的代码。还要检查对Frank评论的回复。我确实转义了我的代码,只是我在这里发布函数时删除了对它的调用在运行查询之前。这应该会向您显示每个传递到mysql_query()的变量实际上是什么。
$q  = "SELECT * ";
$q .= "FROM " . DB_NAME . ".`blog` ";
$q .= "WHERE `blog`.`id` = ".mysql_real_escape_string($bId).";