我想从mysql中选择一个与特定id匹配的行。我希望得到结果,如果ID匹配,如果数据库中不存在ID,它不应该做任何事情。
我是这样的:$q = "SELECT * FROM entries where id= '1'";
$result = mysql_query($q) or die(mysql_error());
if($result){
$row = mysql_fetch_array($result) or die(mysql_error());
$name = $row['name'];
}
echo "hello".$name;
如果db中存在id'1',它应该得到名称,否则没有或者至少它应该给出错误,但是当我使用它时,它只显示在此之后的页面的任何内容码。我做错了什么?
答案 0 :(得分:4)
如果在此代码后没有显示任何代码,则可能是由于发生错误并且您的错误处理已设置,因此不会显示错误。
尝试搜索应包含您未看到的错误的php错误日志文件(normaly php_error.log)。
我会尝试的另一件事是添加更多的echo语句来查看php停止解释的位置。 像这样:
$q = "SELECT * FROM entries where id= '1'";
$result = mysql_query($q);
echo '<br />Query is send';
if(!$result) {
die('<br/>MySQL Error: ' . mysql_error());
}
else {
echo '<br />Result is true';
$row = mysql_fetch_array($result);
echo '<br />tryed fetching row';
if ($row === FALSE) {
echo '<br />$row is not false.';
$name = $row['name'];
echo '<br />$name now is "' . $name . '"';
}
else {
die('<br/>MySQL Error: ' . mysql_error());
}
}
echo '<br />hello: "' . $name . '"';
这可能有助于获得有关您问题的更多信息。
答案 1 :(得分:3)
$id = 1;
$sql = "SELECT `name` FROM `entries` WHERE `id` = $id LIMIT 1" //Since the id is probably an integer type on the DB, the single quotes aren't necessary, and sometimes screw it up. I think MySQL possibly thinks it's a string when in quotes.
$result = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($result))
{
$row = mysql_fetch_assoc($result) or die(mysql_error());
$name = $row['name'];
echo 'Hello ' . $name;
}
答案 2 :(得分:1)
如果您指定的条件与任何行不匹配,SELECT
查询可以返回0行,这不是错误。
发送查询后,您应该检查mysql_num_rows()
的结果。
答案 3 :(得分:0)
也许您应该在if。
中添加else语句if($result)
....
else
do something
你甚至可能想尝试一下catch语句。