MySQL PHP错误-引用系统

5
我无法从我的 PHP 引用中获取作者。
我有一个引用表: id、引用、aid
我还有一个作者表: id、姓名、等等...
<?php

$DB_SERVER = "localhost";
$DB_USER = "root";
$DB_PASS = "";
$DB_NAME = "test";
$con = mysql_connect($DB_SERVER, $DB_USER, $DB_PASS);
mysql_select_db($DB_NAME);

$sql = mysql_query("SELECT * FROM quotes WHERE id = ".$_GET['id'], $con);
$row = mysql_fetch_row($sql);

$sql = mysql_query("SELECT * FROM author where aid = " . $row[1], $con);
$row = mysql_fetch_row($sql); 


var_dump($row);

现在我遇到了这个错误: 警告:mysql_fetch_row()期望参数1为资源类型,但是在/var/www/domain.com/php.php的第14行给出了布尔值。 NULL


你的查询中没有进行任何错误检查。在 mysql_query() 调用之后,必须 进行错误检查。否则,如果查询失败,你的脚本将会崩溃。如何进行错误检查在 mysql_query() 的手册 或者这个 参考问题 中有详细说明。 - Pekka
2
另外,你展示的代码容易受到SQL注入攻击。使用库中适当的过滤方法(例如经典mysql库中的mysql_real_escape_string()),或者切换到PDO和预处理语句。 - Pekka
2个回答

7

如果在第一个查询之后使用 print_r($row);,你会看到以下类似的内容:

Array
(
    [0] => id
    [1] => quote 
    [2] => aid
)

在您的第二个查询中,您使用了$row[1],它是引号(字符串),而不是数字。
$sql = mysql_query("SELECT * FROM author where aid = " . $row[1], $con);

如果你使用mysql_error($con)输出错误信息,你会看到如下内容:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a quote

不要使用mysql_fetch_row,而是使用mysql_fetch_assoc,数组的键名将会是列名。这样,获取数据就非常容易了。别忘了关闭数据库连接。
<?php
$_GET['id'] = 1;
$DB_SERVER = "localhost";
$DB_USER = "root";
$DB_PASS = "";
$DB_NAME = "test";
$con = mysql_connect($DB_SERVER, $DB_USER, $DB_PASS);
mysql_select_db($DB_NAME);
$sql = mysql_query("SELECT * FROM quotes WHERE id = " . (int)$_GET['id'], $con); // or you can use the mysql_real_escape_string
if(!$sql) {
  echo mysql_error($con);
}
$row = mysql_fetch_assoc($sql);
mysql_free_result($sql);

$sql = mysql_query("SELECT * FROM author where id = " . (int)$row['aid'], $con);
if(!$sql) {
  echo mysql_error($con);
}
$row = mysql_fetch_assoc($sql); 
mysql_free_result($sql);

print_r($row);
mysql_close($con);

1

来自手册

mysql_query() 成功时返回资源,出错时返回 FALSE。

如果用户没有权限访问查询引用的表,则 mysql_query() 也会失败并返回 FALSE。

因此,只需进行一些快速的错误检查即可。

$sql = mysql_query("SELECT * FROM author where aid = " . $row[1], $con);
if ( $sql ) {
    $row = mysql_fetch_row($sql); 
}
else {
    //error
}

你可以调用 mysql_error($con) 获取具体的 MySQL 错误。 - Jon Gauthier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接