PHP不显示MYSQL结果
我在windows平台上创建了一个脚本,它连接到mysql数据库并返回表的结果。我编写了一个非常基本的脚本来测试我的连接是否有效。该脚本在我的windows计算机上运行良好,但在我的新mac上运行不正常。在mac上,它根本不显示任何记录 我知道数据库连接已经建立,因为没有错误,但我不明白为什么结果集没有显示在屏幕上,因为我说过它在我的windows机器上运行良好 Mac有mysql和php的apache 我现在不知道该怎么办,有人能帮忙吗 脚本如下:PHP不显示MYSQL结果,php,mysql,Php,Mysql,我在windows平台上创建了一个脚本,它连接到mysql数据库并返回表的结果。我编写了一个非常基本的脚本来测试我的连接是否有效。该脚本在我的windows计算机上运行良好,但在我的新mac上运行不正常。在mac上,它根本不显示任何记录 我知道数据库连接已经建立,因为没有错误,但我不明白为什么结果集没有显示在屏幕上,因为我说过它在我的windows机器上运行良好 Mac有mysql和php的apache 我现在不知道该怎么办,有人能帮忙吗 脚本如下: $dbhost = 'localhost';
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'root';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
$dbname = 'test';
mysql_select_db($dbname);
mysql_select_db("test", $conn);
$result = mysql_query("SELECT * FROM new_table");
while($row = mysql_fetch_array($result))
{
echo $row['test1'] . " " . $row['test2'] . " " . $row['test3'];
echo "<br />";
}
mysql_close($con);
很难看出什么是错的。。。因此,添加一些基本的错误检查,如更改此
$result = mysql_query("SELECT * FROM new_table");
到
这将显示从查询中得到的错误(如果有)。。您将在for mysql_查询中看到,如果出现错误,它将返回一个布尔值
还要注意,关闭MySQL连接的变量名中有一个错误:
mysql_close($con);
应该是
mysql_close($conn);
在获取行之前,检查SELECT查询是否成功
<?php
$result = mysql_query("SELECT * FROM new_table");
if(!$result)
die('SQL query failed: ' . mysql_error());
我能想到的唯一一件事是Mac文件系统是区分大小写的,而windows则不是,所以可能是您错拼了表名。在任何情况下,你都应该这样做
$result = mysql_query("SELECT * FROM new_table") or die("error:".mysql_error());
要查看错误可以执行多种操作来调试此错误 显示所有PHP错误
ini_set('display_errors','On');
ini_set('error_reporting',E_ALL);
捕获所有可能的MySQL错误,而不仅仅是关于您是否成功连接的错误
mysql_select_db("test", $conn) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());
$result = mysql_query("SELECT * FROM new_table") or die(mysql_error());
旁注:没有理由选择要使用两次的数据库。我认为您应该使用改进的PHP mysql驱动程序
try
{
$db = new mysqli("localhost","root","root","test");
if ($db->connect_errno) {
throw new Exception($db->connect_error);
}
if ($result = $db->query("SELECT * FROM new_table")) {
printf("Select returned %d rows.\n", $result->num_rows);
while($row = $result->fetchAssoc())
{
echo $row['test1'] . " " . $row['test2'] . " " . $row['test3'];
echo "<br />";
}
/* free result set */
$result->close();
}
$db->close();
}
catch(Exception $e)
{
printf("Database Error: %s\n", $e->getMessage());
exit();
}
确保你有错误报告;和ini设置“显示错误”,1;如果MySQL扩展没有加载到Mac上,它会出错,但不会出错MySQL_num_rows$的结果是什么;给你什么?试着从$row['test1']使用mysql\u fetch\u assoc而不是mysql\u fetch\u数组和test1实际上必须是列名。还要确保数据库用户在Mac上有权限,但如果它是根用户,则不应是列名issue@SorinButurugeanu实际上不需要,因为默认情况下mysql_fetch_数组返回关联数组和数字数组Windows、Linux和OSX处理表大小写敏感度的方式没有区别。不管操作系统如何,myTable、myTable或myTable都能工作。@KristianAntonsen这不是真的,我有过很多次这个问题。。。你说得对,Linux有区别,但Windows或OSX没有区别,这正是你的答案所宣称的。@Kristantansen Mac Os可能区分大小写。阅读文档:但是,Mac OS X也支持UFS卷,它与任何Unix上的卷一样区分大小写。Apropos execption:我认为异常应该由db驱动程序引发,而不是由您的代码引发,因为异常的主要优点是您不必在每一步都检查返回代码。PDO就是这样做的。
try
{
$db = new mysqli("localhost","root","root","test");
if ($db->connect_errno) {
throw new Exception($db->connect_error);
}
if ($result = $db->query("SELECT * FROM new_table")) {
printf("Select returned %d rows.\n", $result->num_rows);
while($row = $result->fetchAssoc())
{
echo $row['test1'] . " " . $row['test2'] . " " . $row['test3'];
echo "<br />";
}
/* free result set */
$result->close();
}
$db->close();
}
catch(Exception $e)
{
printf("Database Error: %s\n", $e->getMessage());
exit();
}