0

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

我知道我应该将 mysql 转换为 mysqli,但首先我只想完成这项工作。

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

有什么建议么?

视频.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]; ?> 

哪个有效。

4

4 回答 4

1

你正在混合你的引号......

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

应该...

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

或者

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

这对停止 sql 注入没有任何作用......

于 2013-10-30T21:10:43.377 回答
0

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

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

if (isset($_GET['id']))
{
  $id = $_GET['id'];
  echo $id;
}
于 2013-10-30T21:14:17.283 回答
0

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

  • 您是否设法连接到 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

祝你好运!

于 2013-10-30T21:38:57.800 回答
-1

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

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

如果 id 是数字字段。

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

于 2013-10-30T21:05:24.653 回答