mysql php错误 - 报价系统

时间:2011-12-10 20:18:57

标签: php mysql

我无法从我的php引号中获取作者

我有一个报价表: id,quote,aid

我有一个作者表: id,name等...

<?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是资源,第14行的/var/www/domain.com/php.php中给出了boolean NULL

2 个答案:

答案 0 :(得分: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)),你会看到一些东西:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近'报价

而不是使用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 :(得分:1)

来自manual

  

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
}