我在索引页面上创建了一个链接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;
然后我使用此代码从我的表中获取数据
$result = $db->query('SELECT * FROM '.$db->prefix.'tableName WHERE id='.$pid) or error('failed', __FILE__, __LINE__, $db->error());
但是当我通过echo $post_title;
确认时,它没有给出任何结果
你能告诉我哪一个不对吗?提前致谢
答案 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:
答案 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
答案 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。