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