我创建了以下脚本来查询表并返回前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>
答案 0 :(得分:2)
尝试使用mysql_fetch_assoc()
代替mysql_fetch_row()
在你的程序中,你将结果用作关联数组:
$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))
{ ... }
它会起作用