从表中选择当前行,其中包含来自页面url的id

时间:2017-04-05 06:58:31

标签: php mysql

我在索引页面上创建了一个链接example.com/post.php?pid=3,以查看来自该表的信息,该信息在该网址上指定了id。如何从页面url获取id值? 我试着用这个。

if($_GET['id']){
   $id = $_GET['id'];
   $sql="SELECT * FROM tableName where id='$id'";
   $data = mysql_query($sql);
   $row = mysql_fetch_array($data);
   echo $row['post_title'];

但是没有给出任何结果。你有更好的主意吗?

然后我像这样更新我的代码 获得pid值

$pid = isset($_GET['pid']) ? intval($_GET['pid']) : 0;  

当我通过echo $pid;

确认时,此代码成功从网址获取pid值

然后我使用此代码从我的表中获取数据

$result = $db->query('SELECT * FROM '.$db->prefix.'tableName WHERE id='.$pid) or error('failed', __FILE__, __LINE__, $db->error());

但是当我通过echo $post_title;确认时,它没有给出任何结果 你能告诉我哪一个不对吗?提前致谢

6 个答案:

答案 0 :(得分:3)

改变它:

$id = $_GET['id'];

$id = $_GET['pid'];

因为索引为pid=3而您正试图通过id

获取其值

答案 1 :(得分:1)

  

我之前有大约5个答案,所有答案都有   告诉你你的错误,他们也提出了正确的建议   您停止使用mysql_*函数,因为它们已被折旧且没有   更长时间的支持,更好地使用mysqli或pdo预处理语句。

但这些答案都没有告诉你在哪里学习或使用mysqli回答你。

也没有人告诉过你,当你只想要一行时,就没有必要select *,如你的查询所示。

  

实际上你不应该在生产环境中选择SELECT *   只会回来以奇怪的,不可预测的和看似的方式咬你   无关的方式。通过指定所需的列,您将确保   列排序,数据类型,约束和各种其他   从长远来看,元素不会给你带来麻烦。

我花了一些时间使用上面建议的api给你答案, mysqli和pdo准备好的陈述

mysqli:

<?
$conn = new mysqli('host', 'username', 'password', 'database');

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
//check if pid is set and not empty
if (isset($_GET['pid']) && !empty($_GET['pid'])) {

    $id = intval($_GET['pid']);

    $sql = $conn->prepare("SELECT post_title FROM tableName WHERE id = ?  ");
    $sql->bind_param('i', $id);
    $sql->execute();
    $sql->bind_result($post_title);

    while ($sql->fetch()) {

        echo $post_title;
    }

} else {

    //return errors
}



?>

<强> PDO

 <?php


$host    = 'YOURHOST';
$db      = 'YOURDB';
$user    = 'YOURUSERNAME';
$pass    = 'YOURPASSWORD';
$charset = 'utf8';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
        ];


$dbh = new PDO($dsn, $user, $pass, $opt);



if (isset($_GET['pid']) && !empty($_GET['pid'])) {

    $sql = $dbh->prepare("SELECT post_title FROM tableName WHERE id = ?");
    $sql->execute([$id]);
    $row = $sql->fetch();

    echo $row['post_title'];


} else {

    //return something
}

?>

您可以学习的资源:

mysqli准备好了:

https://www.tutorialspoint.com/mysqli/mysqli_prepare.htm http://php.net/manual/en/mysqli.prepare.php

PDO:

https://phpdelusions.net/pdo

http://php.net/manual/en/book.pdo.php

http://jayblanchard.net/demystifying_php_pdo.html

答案 2 :(得分:0)

将代码更新为:更改

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));

$id = $_GET['id'] 

因为此网址$id = $_GET['pid'] 中的example.com/post.php?pid=3已获得价值,因此请在代码中使用pid

删除mysql并使用pdo或mysqli

了解更多信息 http://php.net/manual/en/mysqli.query.php

答案 3 :(得分:0)

在代码打印id中尝试此操作,并在您传递pid

的网址中
$id = $_GET['pid'];

答案 4 :(得分:0)

您的代码中有两个错误

if($_GET['pid']){ // You are passing `pid` in your request
   $id = $_GET['pid'];
   $sql="SELECT * FROM tableName where id='" . $id . "'"; // $id is the variable
   $data = mysql_query($sql);
   $row = mysql_fetch_array($data);
   echo $row['post_title'];

此代码不安全。与PHP 7一样,不推荐使用mysql扩展名。而是使用Mysqli或PDO。

答案 5 :(得分:0)

首先,如果要检查变量是否存在,请使用isset()函数。 在您的网址中,您创建了一个名为“pid”的变量 因此,

if(isset($_GET['pid'])){
       $id = $_GET['pid'];
       $sql="SELECT * FROM tableName where id='$id'";
       $data = mysql_query($sql);
       $row = mysql_fetch_array($data);
       echo $row['post_title'];
}

但请注意.. !! mysql_ *函数已被弃用。你必须学习mysqli_或PDO。