【问题标题】:Php Variable Data AllocationPHP变量数据分配
【发布时间】:2015-03-10 12:13:35
【问题描述】:

我想知道为什么第二个输出 $devNO 给我 bool(false) 是空的。我对此一无所知。我在 mysql_query() 部分错了吗?

$developer = $_POST['dev'];
$platform = $_POST['plat'];
$genre = $_POST['gen'];

var_dump($developer);
echo "<br>";

$devNO = mysql_query("SELECT No FROM developer WHERE Developer = $developer");
$platNO = mysql_query("SELECT No FROM platform WHERE Platform = $platform");
$genNO = mysql_query("SELECT No FROM genre WHERE Genre = $genre");

var_dump($devNO);

这是我的输出:

在这里,我将展示“games.php”的完整代码:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">

<html>
<head lang="en">
    <meta charset="utf-8" />
    <title>Game List</title>
    <link rel="stylesheet" href="css.css">
    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">

    <!-- Optional theme -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap-theme.min.css">

    <style>
        legend {font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif}
    </style>
</head>
<body>
<div id="big_wrapper">
    <header id="top_header">
        <h1><a href="index.html">Dandy's Game Library</a></h1>
    </header>
    <nav id="top_menu">
        <ul>
            <li><strong></stron><a href="index.html">Home</a></strong></li>
            <li><strong><a href="games.php">Game List</a></strong></li>
        </ul>
    </nav>


    <div id="game_wrapper">
        <section id="filter">
            <form action="games.php" method="post" name="search_form">
                <fieldset>
                    <legend><h3><strong>Search</strong></h3></legend>
                    <strong>Developer</strong><br>
                    <select name="dev">
                        <option value="">--Select--</option>
                        <?php

                        include("dbConnection.php");

                        mysql_connect("localhost","root","");
                        mysql_select_db("games");

                        $sql = mysql_query("SELECT Publisher FROM publisher");


                        while($row = mysql_fetch_array($sql)){
                            echo "<option value='".$row['Publisher']."'>" .$row[Publisher]. "</option>";
                        }

                        ?>
                    </select>

                    <br/><br/><strong>Game Platform</strong><br>
                    <select name="plat">
                        <option value="">--Select--</option>
                        <?php

                        $sql = mysql_query("SELECT Platform FROM platform");


                        while($row = mysql_fetch_array($sql)){
                            echo "<option value='".$row['Platform']."'>" .$row[Platform]. "</option>";
                        }
                        ?>
                    </select>

                    <br/><br/><strong>Genre</strong><br>
                    <select name="gen">
                        <option value="">--Select--</option>
                        <?php

                        $sql = mysql_query("SELECT Genre FROM genre");


                        while($row = mysql_fetch_array($sql)){
                            echo "<option value='".$row['Genre']."'>" .$row[Genre]. "</option>";
                        }

                        $developer = $_POST['dev'];
                        $platform = $_POST['plat'];
                        $genre = $_POST['gen'];

                        ?>
                    </select>

                    <br><br><input type="submit" name="search" value="Search"></input>

                </fieldset>
            </form>
        </section>
        <aside id="items">
            <fieldset>
                <legend><h3><strong>Game List</strong></h3></legend>

                <?php

                    var_dump($developer);

                    $devNO = mysql_query("SELECT No FROM developer WHERE Developer = $developer");
                    $platNO = mysql_query("SELECT No FROM platform WHERE Platform = $platform");
                    $genNO = mysql_query("SELECT No FROM genre WHERE Genre = $genre");

                    var_dump($devNO);

                    $sql = sprintf("SELECT Title, Release_Year, Language, Price FROM games WHERE Developer_NO = $devNO");
                    $result = mysql_query($sql);

                    $game_title = 'Title';
                    $game_year = 'Release_Year';
                    $game_lan = 'Language';
                    $game_price = 'Price';
                ?>

                <div id="gamelist">

                    <?php

                        if(!$result) {
                            die(mysql_error());
                        }
                        while($row = mysql_fetch_array($result)) {
                    ?>
                        <div class="row">
                            <div class="cell"><?php echo $row[$game_title]?></div>
                            <div class="cell"><?php echo "Year : ".$row[$game_year]?></div>
                            <div class="cell"><?php echo "Language : ".$row[$game_lan]?></div>
                            <div class="cell"><?php echo "Price : RM".$row[$game_price]?></div>
                        </div>
                    <?php
                        }
                    ?>
                </div>





            </fieldset>
        </aside>
    </div>
</div>
<div id="btm_wrapper">
    <footer id="foot">
        <strong></strong>
    </footer>
</div>
</body>
</html>

在我从下拉列表中搜索后,完整的输出将是这样的:

【问题讨论】:

  • 这是因为您的查询失败并返回 false。 Genre 是一个整数吗:Genre = $genre,如果不在变量周围加上单引号以将其作为字符串线程化,当我们已经在这里时,为什么不升级/更改为 mysqli_*PDO
  • @Rizier123 输出是一样的>
  • 然后向我们展示您的完整真实代码
  • “我在 mysql_query() 部分错了吗?” - 将 or die(mysql_error()) 添加到您所有的 mysql_query() 并亲自查看 ;-) 将错误报告添加到在您打开 PHP 标记(例如 &lt;?php error_reporting(E_ALL); ini_set('display_errors', 1);)之后的文件顶部,然后是其余代码,看看它是否产生任何结果。

标签: php sql variables boolean


【解决方案1】:

方法 mysql_query() 如果成功,则返回一个结果集,即使从查询中只返回一个值,也必须将其制成一个数组。

理想情况下,这个数组应该有一个 for-each 迭代来获得结果,但是如果你确定你会得到至少一个值,第一行具有所需的索引(在你的情况下为“否”)。

$dataset= mysql_query("SELECT No FROM developer WHERE Developer = '$developer'");
$row = mysql_fetch_assoc($dataset);
$devNO = $row['No'];

还要注意我用于 varchar 的引用。它在另一个答案中被正确指出。立即尝试。

【讨论】:

    【解决方案2】:

    如果 $developer 是字符串,请使用引号。您需要先从结果集中获取结果,然后在代码中使用它:

    <?php
    
        $devNOResult = mysql_query("SELECT No FROM developer WHERE Developer = '$developer'");
        $platNOResult = mysql_query("SELECT No FROM platform WHERE Platform = '$platform'");
        $genNOResult = mysql_query("SELECT No FROM genre WHERE Genre = '$genre'");
    
        $devNO = mysql_fetch_row($devNOResult);
    
        $sql = sprintf("SELECT Title, Release_Year, Language, Price FROM games WHERE Developer_NO = $devNO");
        $result = mysql_query($sql);
    
    $game_title = 'Title';
    $game_year = 'Release_Year';
    $game_lan = 'Language';
    $game_price = 'Price';
                    ?>
    
                    <div id="gamelist">
    
                        <?php
    
                            if(!$result) {
                                die(mysql_error());
                            }
                            while($row = mysql_fetch_array($result)) {
                        ?>
    

    【讨论】:

    • 代替 var_dump($devNO);尝试回显“SELECT No FROM developer WHERE Developer = $developer”以查看您的 SQL 的外观。请张贴在这里。
    • 当我尝试这个时它什么也没显示:echo mysql_query("SELECT No FROM developer WHERE Developer = '$developer'");
    • 当我在没有 mysql_query() 的情况下回显时,它给了我这个输出:SELECT No FROM developer WHERE Developer = '2K Games'
    • 比您的查询有问题...您需要单引号所有变量,因为它们是字符串变量。用正确的查询编辑答案。
    • 查询没问题。如何使用查询结果存在问题。我将用整个代码更新我的答案。敬请期待!
    猜你喜欢
    • 2017-04-25
    • 2014-04-26
    • 1970-01-01
    • 2023-03-04
    • 2023-03-26
    • 1970-01-01
    • 2012-06-13
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多