函数popList()
有两个参数 - 列的名称和表的名称。
基本上,popList(
)函数连接到mysql
服务器,然后连接到数据库并构建一个sql查询,以根据您传递给用于填充页面上的列表框的函数的内容来检索数据。 / p>
只有一个列表框可以正常使用该功能,但是如果页面上的第二个列表框再次使用不同的参数(列名称和表名称)调用该函数,则它将显示为空,并且在第一个填充列表框源头下的页面源:
警告:mysql_connect()[function.mysql-connect]:访问 拒绝用户' ODBC' @' localhost' (使用密码:NO)in 第 7行 C:\ xampp \ htdocs \ test
未连接: 用户访问被拒绝“ODBC' @' localhost' (使用密码:否)
我在两个调用中使用相同的连接凭据,默认为localhost,root和无密码(纯粹用于测试目的)
为什么会这样?
修改* (源)*:
<?php
function popList($col, $tbl) {
require_once "credentials.php";
// Opens a connection to a MySQL server
$connection=mysql_connect($host, $username, $password);
if (!$connection) {
die('Not connected : ' . mysql_error());
}
// Set the active MySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
die ('Can\'t use db : ' . mysql_error());
}
$sql = "SELECT $field FROM $table";
$query = mysql_query($sql);
while ($row = mysql_fetch_array($query)) {
echo '<option value="' . $row["$field"] . '">' . $row["$field"] . '</option>';
}
mysql_close($connection);
}
?>
解:
新:似乎使用require_once
和include_once
会导致此问题,但使用include
或require
实际上可以解决问题。
用:require_once "credentials.php"
中的实际代码替换credentials.php
,如此
function popList(...) {
require "credentials.php"; // changed to require from require_once. same with include
...
}
答案 0 :(得分:3)
引用你,
我在两个调用中使用相同的连接凭据,默认为localhost,root和无密码(纯粹用于测试目的)
由于您提到没有密码的root用户,并且在错误中,它显示为: Access denied for user 'ODBC'@'localhost' (using password: NO)
,这意味着您实际上是在尝试连接用户ODBC
没有密码,我认为有密码。
答案 1 :(得分:2)
require_once
按照说法执行:它需要一次。第一次调用popList
时,credentials.php
中的所有内容都会被转储到您的函数范围内。第二次调用popList
时,没有任何事情发生,因为在此次运行期间已经需要credentials.php
一次。
你应该在一个配置对象而不是文件中的一堆变量,你不应该在这样的函数中使用require
或include
,你应该E_STRICT
打开,这样你就会看到关于$password
等没有被定义的警告。
答案 2 :(得分:0)
嗨,你可以这样做
$query="SELECT * FROM bus_type order by bus_type_id Asc";
$result = mysqli_query($conn, $query);
echo "<select name=bustype size=sizes class=bus_txtbox value=''>Type of the Bus</option>";
while($line=mysqli_fetch_array($result, MYSQLI_ASSOC)){
echo "<option value=$line[bus_type_id]>$line[bus_type]</option>";
}
echo "</select>";