【发布时间】:2010-03-09 01:44:40
【问题描述】:
为什么我得到一个“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 托管(有史以来最差的托管)、带有一行文本的自定义 .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&1 Hosting 问题有关。
更新:我正在从 1&1 Hosting 转移到 HostMoster。 1&1 将 PHP 作为 CGI 运行并运行 PHP4 而不是 PHP5(您可以制作自定义 .htaccess 文件以使其运行 PHP5)。稍后我会更新你。
【问题讨论】:
-
看起来 sql-injection 易受攻击。使用 mysql_real_escape_string() 转义参数或使用参数化查询。
-
我做了...你在这里看不到它,因为我从这里删除了它,以便我可以让它简单地阅读。我有一个自动检查“mysql_real_escape_string”是否有效的函数。如果它有效,那么它将检查“get_magic_quotes_gpc”是否处于活动状态。如果是这样,那么它将去除斜线并使用“get_magic_quotes_gpc”。如果没有,那么它将只使用“get_magic_quotes_gpc”。最后,如果 get_magic_quotes_gpc 和 $magic_quotes_active 无效或启用,那么它只会添加斜杠。我从 Lynda.com 上一些视频的作者 Kevin Shoglund 那里得到了这个功能。
标签: php