0

函数popList()有两个参数——列名和表名。基本上popList() 函数连接到mysql服务器,然后连接到数据库,并构建一个 sql 查询,以根据您传递给函数的内容来检索数据,以用于填充页面上的列表框。

只有一个列表框适用于该函数,但如果页面上有第二个列表框使用不同的参数(列名和表名)再次调用该函数,则它显示为空,并且以下内容打印在页面的源代码中第一个填充列表框的来源:

警告:mysql_connect() [function.mysql-connect]:第7C:\xampp\htdocs\test中的用户 'ODBC'@'localhost' 的访问被拒绝(使用密码:否) 未连接:用户的访问被拒绝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_onceinclude_once导致问题,但使用includerequire实际解决了问题。

替换为像这样require_once "credentials.php"的实际代码credentials.php

function popList(...) {

require "credentials.php"; // changed to require from require_once. same with include


...
}
4

3 回答 3

3

引用你的话,

我在两个调用中使用相同的连接凭据,它们是默认的 localhost、root 和无密码(纯粹用于测试目的)

由于您提到没有密码的root用户,并且在错误中,它出现:Access denied for user 'ODBC'@'localhost' (using password: NO)这意味着您实际上是在尝试连接ODBC没有密码的用户,我认为这是有密码的。

于 2012-04-25T16:09:33.790 回答
2

require_once做它所说的:它需要一次。第一次popList被调用,所有内容都credentials.php被转储到你的函数范围内。第二次popList被调用,没有任何反应,因为credentials.php在此运行期间已经需要一次。

你应该在某个地方有一个配置对象,而不是文件中的一堆变量,你不应该使用requireinclude在这样的函数中使用,你应该E_STRICT打开,这样你就会看到关于$passwordetc 未定义的警告。

于 2012-04-25T18:54:01.527 回答
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>";
于 2012-12-18T11:21:30.830 回答