答案 0 :(得分:6)
你将php标签放在php中
echo '<option value="<?php echo $date ?>"><?php echo $date ?></option>';
应该是
echo '<option value="'.$date.'">'.$date.'</option>';
mysql也已弃用,请考虑更新
答案 1 :(得分:-1)
根据您的编码样式首选项,您可以通过将echo'ed字符串包装在双引号中来避免使用连接。这将允许您将变量直接放在字符串中。性能优势相当微观,但您可能会发现更容易阅读和调试您的工作。我发现如果有一堆连接只是为了回显变量,那么很容易有一个额外的或缺少的单引号并忽略它 - 所以除非编写一个内联条件语句或函数,否则通常会尝试避免它。
您也不需要声明一个新变量来存储$date = $row['date'];
,回显像这样的数组元素是完全有效的:$row['date']
。
在echo'ed数组元素周围使用大括号。 Notepad ++或您正在编写的任何内容应该(或可能)很好地为您的脚本着色,以帮助您识别字符串中的变量。
我会将您的mysql_
函数更新为mysqli
并以这种方式编写代码:
if(!$db=new mysqli("localhost","root","","employees")){
echo "Connection Error: ",$db->connect_error; // do not echo when live
}elseif(!$result=$db->query("SELECT DISTINCT LEFT(from_date,4) AS date FROM salaries")){
echo "Query Syntax Error: ",$db->error; // do not echo when live
}elseif(!$result->num_rows){
echo "Query Logic Error: No dates found in salaries table"; // write your preferred message
}else{
echo "<select>";
while($row=$result->fetch_assoc()){
echo "<option value=\"{$row['date']}\">{$row['date']}</option>";
}
echo "</select>";
}
*请注意,双引号回波线内使用的任何双引号必须使用\
进行转义/前置。
在PHP手册规范@ http://php.net/manual/en/language.operators.string.php下的评论中,有一些关于字符串连接,大括号和性能速度的讨论点。