为什么我在使用php查询mysql时返回空记录?

时间:2010-03-09 04:25:20

标签: php mysql

我创建了以下脚本来查询表并返回前30个结果。查询返回30个结果,但它们没有任何文本或信息。为什么会这样?

该表存储越南字符。数据库是mysql4。

以下是页面:http://saomaidanang.com/recentposts.php

以下是代码:

<?php
  header( 'Content-Type: text/html; charset=utf-8' );
 //CONNECTION INFO
 $dbms = 'mysql'; 
 $dbhost = 'xxxxx';
 $dbname = 'xxxxxxx';
 $dbuser = 'xxxxxxx';
 $dbpasswd = 'xxxxxxxxxxxx';    
 $conn = mysql_connect($dbhost, $dbuser, $dbpasswd ) or die('Error connecting to mysql');
 mysql_select_db($dbname , $conn);

 //QUERY
 $result = mysql_query("SET NAMES utf8");
 $cmd = 'SELECT * FROM `phpbb_posts_text` ORDER BY `phpbb_posts_text`.`post_subject` DESC LIMIT 0, 30 '; 
 $result = mysql_query($cmd);
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html dir="ltr">
<head>
<title>recent posts</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
 <p>

<?php 
 //DISPLAY
 while ($myrow = mysql_fetch_row($result))
 {
  echo 'post subject:';
  echo(utf8_encode($myrow ['post_subject']));
  echo 'post text:';
  echo(utf8_encode($myrow ['post_text']));
 }
?>
 </p>
</body>

4 个答案:

答案 0 :(得分:2)

尝试使用mysql_fetch_assoc()代替mysql_fetch_row()

  • 前者返回一个数组 结果列存储在数组中 偏移量,从偏移量0开始。
  • 后者返回一个关联 列的数组,其中列为 用作钥匙。

在你的程序中,你将结果用作关联数组:

$myrow ['post_subject']

答案 1 :(得分:1)

或者您可以尝试mysql_fetch_object()并以$myrow->post_subject的形式访问数据。如果您觉得数据仍未显示,请对输出执行print_r($myrow)。这样您就可以确定数据是否已被返回。

答案 2 :(得分:0)

如果你使用mysql_fetch_row(),你将需要通过数字键访问你的数据(即$ row [0],$ row [1]等)。 mysql_fetch_object()是大多数应用程序中的标准,用于获取Shamly提到的行。

我不喜欢使用PHP提供的函数来进行日常编码。相反,考虑编写(或下载)一个类或一些函数来帮助您完成工作,例如:

function my_query($query){
  $return = array(); // stuff to return

  $result = mysql_query($query);
  while($row = mysql_fetch_object($result)){
    array_push($return, $row);
  }

  return $return;
}

那么你需要做的就是在你的剧本中:

// connect to db, fill in the appropriate arguments...
$link = mysql_connect(...);

// selecting database
mysql_select_db($dbname, $link);

// do the query
$rows = my_query(...);
foreach($rows as $row){
   print_r($row); // see what's in there...
}

通过使用my_query()函数,您可以节省几个步骤。这在循环中进行嵌套查询时也特别有用。什么更容易阅读?

// assume database is already connected
$result = mysql_query('SELECT user_id FROM table');
while($row = mysql_fetch_object($result)){
   $result_2 = mysql_query('SELECT * FROM other_table WHERE user_id = '.$row->user_id);
   while($row_2 = mysql_fetch_object($result_2)){
       // do stuff with both rows
       // potential for lots of confusion and mysql errors
   }
}

或者这......

// assume database is already connected
$user_ids = my_query('SELECT user_id FROM table');
foreach($user_ids as $x){
    $more_data = my_query('SELECT * FROM other_table WHERE user_id = '.$x->user_id);
    foreach($more_data as $y){
        // do stuff 
    }
}

无论如何,可能比你预期的要长得多,但我希望它能让你知道如何去做事:)如果你有时间,安装Wordpress并学习如何使用它内置的$ wpdb对象。您将获得有关如何在现实生活中使用数据库的丰富知识,并且您将能够创建自己的数据库类以满足您的需求。

免责声明:我刚刚为这篇文章编写了上述所有代码而未对语法错误进行测试。如果有的话,我道歉。

答案 3 :(得分:0)

使用:

while ($myrow = mysql_fetch_array($result))
{ ... }

它会起作用