【问题标题】:page for each row in mysqlmysql中每一行的页面
【发布时间】:2013-10-30 21:03:55
【问题描述】:

我是 php 新手,我一直在努力为所有文章制作一个独特的页面几个小时。不管我做什么都行不通。

我知道我应该将 mysql 转换为 mysqli,但首先我只是想让它工作。

当我转到 url/video.php?id=3 时,它只显示一个空白页面,它不会从文章表中打印“名称”

有什么建议吗?

video.php

<?php 

include "connect.php"; 


$id = mysql_real_escape_string($_GET['id']);
$query = "SELECT `name` FROM `article` WHERE `id` = '.$id.'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);

// Echo page content
echo $row['name'];
?>

我从 index.php 链接到以下

 <a href="/video.php?id=<? echo $row[id]; ?> 

哪个有效。

【问题讨论】:

  • 这个id真的存在吗?使用mysql_error 确保您的查询工作正常
  • 不知道这是否是您问题的答案,但是当我写 echo $_GET['id'];它打印在这种情况下为 3 的 id

标签: php mysql


【解决方案1】:

你在混用你的引号......

"SELECT `name` FROM `article` WHERE `id` = '.$id.'";

应该是……

"SELECT `name` FROM `article` WHERE `id` = $id";

'SELECT `name` FROM `article` WHERE `id` = '.$id;

这并不能阻止 sql 注入...

【讨论】:

    【解决方案2】:

    我看到的另一件事,但我假设如果你这样做了:

    • 您成功连接到 MySQL 服务器了吗?
    • 您是否选择了 要使用的数据库?
    • 你知道PHP中的函数mysql_result吗?并且
    • 你知道 MySQL 中的 LIMIT 吗?

    试试:

    MySQL:

    /**
    * Connect and define your connection var
    */
    $connection = mysql_connect("localhost","root","");
    /**
    *   Select your database
    */
    mysql_select_db("mydatabase",$connection);
    
    /**
    * Check if exists "id" in $_GET
    */
    if( array_key_exists( "id" , $_GET ) )
    {
        $id = mysql_real_escape_string( $_GET [ "id" ],$connection );
        /**
        *   Remember use LIMIT
        */
        $source = mysql_query("SELECT `name` FROM `article` WHERE `id` = '$id' LIMIT 1",$connection);
    
        /**
        * if you need print only name
        */
        if( mysql_num_rows( $source ) )
        {
            // print only name
            echo mysql_result( $source );
        }
        /**
        * but if you need retrive array
        */
        $row = mysql_fetch_assoc( $source );
        echo $row["name"];
    }
    

    MySQLi:

    /**
    * Connect and define your connection var
    */
    $connection = mysqli_connect("localhost","root","");
    /**
    * Check if is connected[ http://us2.php.net/manual/en/mysqli.connect-errno.php ]
    */
    if( mysqli_connect_errno() == 0 )
    {
        /**
        *   Select your database
        */
        mysqli_select_db( $connection , "mydatabase" );
    
        /**
        * Check if exists "id" in $_GET
        */
        if( array_key_exists( "id" , $_GET ) )
        {
            $id = mysqli_real_escape_string($connection,$_GET [ "id" ]);
            /**
            *   Remember use LIMIT
            */
            $source = mysqli_query($connection,"SELECT `name` FROM `article` WHERE `id` = '$id' LIMIT 1");
    
            /**
            * if you need print only name
            */
            if( mysqli_num_rows( $source ) )
            {
                // print only name
                $row = mysqli_fetch_array( $source );
                echo $row[0];
            }
            /**
            * but if you need retrive array
            */
            $row = mysqli_fetch_assoc( $source );
            echo $row["name"];
        }
    
    }
    

    并且,请阅读 MySQL 上的 LIMIT

    祝你好运!

    【讨论】:

    • 它打印出名称并出现以下错误:警告:mysql_result() 需要至少 2 个参数,1 在第 29 行的 / 中给出
    【解决方案3】:

    您是否测试过 $row 变量中有哪些值?使用var_dump($row) 查看值。

    顺便说一句,你应该检查ID:

    if (isset($_GET['id']))
    {
      $id = $_GET['id'];
      echo $id;
    }
    

    【讨论】:

    • 使用它不显示任何东西,但如果只是使用 echo $_GET['id'];然后它打印出 id 在这种情况下是 3
    【解决方案4】:

    如果 id 是一个数字字段,正如您的问题所暗示的那样,那应该是

    $id = (int)$_GET['id'];
    $query = "SELECT `name` FROM `article` WHERE `id` = $id";
    

    如果 id 是数字字段。

    请注意,我还删除了查询字符串中的点,这将使查询无效,无论 id 是否为数字字段。

    【讨论】:

    • 我认为是评论而不是答案
    • 问题是为什么它不起作用。我的猜测是 id 字段是数字的,在这种情况下像字符串一样查询它是行不通的。即使会,这些点也会使查询无效。
    • "guess" 可能会把它泄露出去——答案不应该被猜到。使用 mysql_real_escape_string 应该与数值一起使用 - 我并不是说你应该使用它而不是 intval 或更合适的东西
    • 很遗憾我不在 Frederik 的电脑旁,所以我不能确定,可以吗?但是,如果您想为文字争论,让我们假装我说的是“推断(根据给定的有限数据)”。无论如何,我注意到查询中的点使它无效仍然存在;因此,我将感谢您删除反对票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 2020-09-14
    相关资源
    最近更新 更多