【问题标题】:PHP, MYSQL and hyperlinks - linking from one page to a detail page (same table) [duplicate]PHP,MYSQL 和超链接 - 从一页链接到详细信息页(同一张表)[重复]
【发布时间】:2018-08-07 12:55:48
【问题描述】:

不确定为什么此页面似乎无法正常工作?

尝试从 URL 中获取 ID 并使用它来过滤表。

示例网址:http://example.com/page.php?id=123G

当我输入该 URL 时,我得到 0 个结果,即使我知道有匹配项。有任何想法吗?

<html>
<head>
<style>table, th, td {border: 1px solid black;}</style>
</head>

<?php

$id = $_GET["id"];

$servername = "INSERTSERVER";
$username = "INSERTUSER";
$password = "INSERTPASSWORD";
$dbname = "INSERTDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 


$pd = "

SELECT fac_id, pd, phone_pd 
FROM ft_location_db
WHERE fac_id = $id

";


$result = $conn->query($pd);

if ($result->num_rows > 0) {
echo "<table cellpadding=5 bgcolor=#FFFFFF><tr><th>PD</th><th>Phone</th>
</tr>";
// output data of each row
while($row = $result->fetch_assoc()) {
    echo "<tr><td>" . $row["pd"]. "</td><td>" . $row["phone_pd"]. "</td>
</tr>";
}
echo "</table>";
} else {
echo "0 results";
}






$conn->close();
?> 

</body>
</html>

【问题讨论】:

  • 如果标识符是123Gfac_id 列好像是字符串数据类型吧?
  • 是的,有问题吗?它是独一无二的。
  • 其实想通了。 WHERE fac_id = $id 必须是 WHERE fac_id = '$id' 对于 SQL 和 PHP 来说非常新。 ' 和 " 有什么关系?好像我看到的东西写法不同?

标签: php mysql hyperlink


【解决方案1】:

请参阅答案底部的注释。

如果fac_id 是一个字符串数据类型,它应该被包装。

$pd = "
SELECT fac_id, pd, phone_pd 
FROM ft_location_db
WHERE fac_id = '$id'
";

您必须使用单引号,因为您的查询写在双引号内。

使用单引号:

$pd = '
SELECT fac_id, pd, phone_pd 
FROM ft_location_db
WHERE fac_id = "' . $id . '"
';

但是(而且非常重要),我建议您查看How can I prevent SQL injection in PHP? 以确保您的查询安全。

$stmt = $conn->prepare('
    SELECT fac_id, pd, phone_pd 
    FROM ft_location_db
    WHERE fac_id = ?');
$stmt->bind_param('s', $id);
$stmt->execute();
$result = $stmt->get_result();

另请参阅:bind_param()

【讨论】:

  • “因为变量不会在单引号字符串中解释。” - 嗯?
  • 你说得对,但我上面引用你的话,需要编辑或删除。
  • 这是否容易受到 sql 注入的影响?我认为作为一个准备好的声明我还可以吗??谢谢!
  • @FunkFortyNiner 我删除了这句话。可能是我的翻译有误。但我不知道我的错误是什么。你能启发我吗?非常感谢。
  • @Talsma 是的,它很容易受到攻击。尽快使用准备好的语句:)
猜你喜欢
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
相关资源
最近更新 更多