【问题标题】:How do I compare input to mysql data with php/sql?如何将 mysql 数据的输入与 php/sql 进行比较?
【发布时间】:2013-05-13 05:15:44
【问题描述】:

我是使用 PHP 和 mySQL DB 的新手。我正在尝试让用户输入用户名(UN)以进入我网站的这一部分。我有一个带有名为“test”的用户表的 mySQL DB(test)。 我知道我连接正常,因为我通过创建一个简单的页面来打开数据库并列出所有用户(来自联合国字段)来测试它,或者选择一个特定的用户。然后我创建了一个名为“input.php”的页面来测试获取输入。如此处所示>

<html>
 <body>
 <form action="test.php" method="get">
 UN: <input type="text" name="U">
 <input type="submit">
 </form>
 </body>
 </html>

上面的输入转到下面的“test.php”,在我的数据库中检查当前数据。

<?php
$hostname = "test.db.some#.somehost.com";
    $username = "test";
    $dbname = "test";
$password = "password";
$usertable = "test";
$yourfield = "UN";
    mysql_connect($hostname, $username, $password) OR DIE ("Unable to 
        connect to database! Please try again later.");
    mysql_select_db($dbname);
$query = "SELECT * FROM $usertable WHERE $yourfield = $_GET["U"]";
    $result = mysql_query($query);
    if ($result) {
        while($row = mysql_fetch_array($result)) {
                $name = $row["$yourfield"];
                echo "Hello: $name<br>";
            }
    }
    else {
        echo "User dosen't exit!";
    }
    mysql_close();
?>

这是我得到的错误> *解析错误:语法错误,意外'"',在第 20 行的 /home/content/81/11107981/html/test.php 中需要 T_STRING 或 T_VARIABLE 或 T_NUM_STRING *

我知道我很接近了,但我想要雪茄。 ;)

【问题讨论】:

    标签: php mysql sql database input


    【解决方案1】:

    我认为问题在于您没有转义查询中的引号:

    尝试以下方法:

    $u = $_GET['u'];
    $query = "SELECT * FROM $usertable WHERE $yourfield = " . $u;
    

    【讨论】:

      【解决方案2】:

      mysql_* 已弃用。你应该避开它们。

      改变

      mysql_connect($hostname, $username, $password) OR DIE ("Unable to 
          connect to database! Please try again later.");
      

      $connection = mysql_connect($hostname, $username, $password) OR DIE ("Unable to 
      connect to database! Please try again later.");
      

      ,

      $query = "SELECT * FROM $usertable WHERE $yourfield = $_GET["U"]";
      

      $query = "SELECT * FROM $usertable WHERE $yourfield = '".$_GET["U"]."'";
      

      mysql_close();
      

      mysql_close($connection);
      

      【讨论】:

      • mysql_* 已弃用为 PHP 5.5.0,将来会被删除。
      • 哇,感谢您的快速响应 #1 :D #2 现在可以使用了。是的,我必须使用我的虚拟主机为我提供的使用 mysql 代码的旧示例。愿 mucho Karma 对你微笑。 :)
      • 很高兴知道它有帮助。也许,你可以接受这个答案;)
      • 哦,但我现在遇到了不同的问题。当我输入一个以 dB 为单位的用户名时,它可以工作,但是当我输入一个不在 dB 中的用户名时,它什么也不做,只是空白页。它应该返回错误。由于某种原因,它没有进入最后的 else 语句。
      • 因为它还在 if 条件下执行代码。在while循环外面写echo "i am here"你就会知道了。
      【解决方案3】:

      您应该改为这样编写查询:

      $query = "SELECT * FROM $usertable WHERE $yourfield = '" . $_GET["U"] . "'";
      

      或者你可以这样写:

      $query = "SELECT * FROM $usertable WHERE $yourfield = '{$_GET["U"]}'";
      

      【讨论】:

        【解决方案4】:

        您的第一个问题已解决,但这里是您的第二个问题的解决方案以及将此代码转换为 mysqli 的帮助

        <?php
        $hostname = "test.db.some#.somehost.com";
        $username = "test";
        $dbname = "test";
        $password = "password";
        $usertable = "test";
        $yourfield = "UN";
        $connect   =  mysqli_connect($hostname, $username, $password) OR DIE ("Unable to 
            connect to database! Please try again later.");
        mysqli_select_db($dbname);
        
        /* You can combine the above two lines in oen in mysqli by giving db name as fourth parameter
         mysqli_connect($hostname, $username, $password, $dbname)
        
        */
        
        $query = "SELECT * FROM $usertable WHERE $yourfield = $_GET["U"]";
        $result = mysqli_query($query);
        $rowSelected   = mysqli_num_rows($result);
        if ($rowSelected ) {
            while($row = mysqli_fetch_array($result)) {
                    $name = $row["$yourfield"];
                    echo "Hello: $name<br>";
                }
        }
        else {
            echo "User dosen't exit!";
        }
        mysqli_close($connect);
        ?>
        

        mysql_querymysqli_query 将返回资源..无论是否获取行,这都是正确的..您需要检查是否有任何实际正在获取的数据..所以使用mysqli_num_rows(mysqli version of mysql_num_rows)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-20
          • 2023-04-07
          • 1970-01-01
          • 1970-01-01
          • 2018-10-07
          • 2021-11-16
          • 1970-01-01
          相关资源
          最近更新 更多