<?php
$user = 'root';
$password = 'root';
$db = 'urls';
$host = 'localhost';
$port = 8889;
$link = mysqli_init();
$success = mysqli_real_connect(
$link,
$host,
$user,
$password,
$db,
$port
);
//echo $success;
$query = "SELECT id, title, url, votes FROM link ORDER BY id LIMIT 3";
$result = mysqli_query($success, $query);
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
printf ("%s (%s)\n", $row["title"], $row["url"]);
/* free result set */
mysqli_free_result($result);
/* close connection */
mysqli_close($link);
?>
所以这是我写的代码。显然,这样做的目的是从我的mysql服务器获取最新数据并将其打印出来。但是,当我在我的mac上运行此代码时(我正在使用MAMP),它只显示'0'。这有什么问题?
答案 0 :(得分:2)
mysqli_real_connect
返回一个布尔值,它不返回MySQLi资源。因此,您必须在$link
而非$success
$result = mysqli_query($success, $query);
^
应该是
$result = mysqli_query($link, $query);
没有任何错误检查,它就像一个猜谜游戏,请考虑错误检查连接是否导致错误或查询本身,这将帮助你很长的路。
另请注意,您必须在一次调用中获取所有行(使用与您现在使用的函数不同的函数),或者您必须遍历结果以获取所有行,并使用您当前的代码即使问题得到解决,也只能获得最多一行。
另外请注意,为什么不使用更简单的mysqli_connect
选项并使用此2步连接而不使用任何特殊标志?
答案 1 :(得分:1)
尝试使用更多错误处理
<?php
$user = 'root';
$password = 'root';
$db = 'urls';
$host = 'localhost';
$port = 8889;
echo date('Y-m-d H:i:s', filemtime(__FILE__)), "\r\n";
$link = mysqli_init();
if ( !mysqli_real_connect($link, $host, $user, $password, $db, $port) ) {
trigger_error('connect failed', E_USER_ERROR);
}
else {
$query = "SELECT id, title, url, votes FROM link ORDER BY id LIMIT 3";
$result = mysqli_query($link, $query); // <- you have to pass the connection resource/object here
if ( !$result ) {
trigger_error('query failed', E_USER_ERROR);
}
else {
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
if ( !$row ) {
echo 'no results';
}
else {
do {
printf ("%s (%s)\n", $row["title"], $row["url"]);
} while($row = mysqli_fetch_array($result, MYSQLI_ASSOC));
}
/* free result set */
mysqli_free_result($result);
}
/* close connection */
mysqli_close($link);
}
(echo date ...行用于检查您是否正在查看最新和最好的脚本版本的输出;-))