【问题标题】:$_GET['id'] Problems retrieving data$_GET['id'] 检索数据时出现问题
【发布时间】:2023-04-09 12:52:01
【问题描述】:

只是尝试使用 php 的“echo”粘贴一些值,但运气不好。

我相信我使用的代码在其第一个变量设置“$theid”中存在问题,它从表中获取 id 字段。代码如下:

<?php

$conn=mysql_connect("localhost", "username", "password")
or die ("Cannot Connect to MYSQL");

mysql_select_db("database1", $conn)
or die ("Cannot Connect to the Database");
echo "Connected successfully";

$theid = isset($_GET['id'])?$_GET['id']:""; //Possible problematic code

$data = mysql_fetch_array(mysql_query("SELECT * FROM table1 WHERE id='$theid'"));

?>

然后将使用数据:

<?php echo $data['url'] ?>

问题是,“$data”下什么都没有显示

在解决这个问题并环顾四周后,我仍然没有找到答案。非常感谢任何反馈,我相信这只是我使用语法的错误!。谢谢。

【问题讨论】:

  • mysql_fetch_array() 内嵌套mysql_query() 时,mysql_query() 失败时无法调试。把它放在前面加上一个`mysql_query() or die(mysql_error() 看看为什么。请注意,您应该放弃使用 mysql_ 的任何尝试并更新为 mysqli_PDO
  • 另外,$_GET 用于获取 HTTP GET 发送的参数(通常通过 URL)。你如何测试这个页面?只有当您访问此页面时,您才会得到任何东西,例如(示例)http://localhost/test.php?id=123
  • 感谢肖恩的评论,我会考虑这样做。我正在使用在线测试服务器和基于 apache 的本地服务器 @mathielo :)
  • 您应该阅读:How can I prevent SQL-injection in PHP?。您现在所做的将导致您的生产代码出现重大问题。我的意思是这样,我可以在 5 分钟内拥有你的整个数据库。
  • @Darren,为此欢呼,由于我在收集数据时遇到的问题,我已经将这段代码恢复到了基础,我会在它工作时添加安全和保护 :)

标签: php sql arrays database isset


【解决方案1】:

使用while循环打印查询结果数据

<?php

$conn=mysql_connect("localhost", "username", "password")
or die ("Cannot Connect to MYSQL");

mysql_select_db("database1", $conn)
or die ("Cannot Connect to the Database");
echo "Connected successfully";

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

$result = mysql_query("SELECT * FROM table1 WHERE id='$theid'");

while($data = mysql_fetch_array($result)){
    echo $data['url'];
}

?>

【讨论】:

  • 不幸的是,这不起作用@jivani,仍然无法获取任何数据
  • 警告:mysql_fetch_array() 期望参数 1 是资源,给定的布尔值
【解决方案2】:
$conn=mysql_connect("localhost", "username", "password")
or die ("Cannot Connect to MYSQL");

mysql_select_db("database1", $conn)
or die ("Cannot Connect to the Database");
echo "Connected successfully";

//default value
$theid = 0;
if(isset($_GET['id'])){
   $theid = $_GET['id'];
}

$result = mysql_query("SELECT * FROM table1 WHERE id='".(int)$theid."'");

while($data = mysql_fetch_array($result)){
    echo $data['url'];
}

强制转换为 int 以防止 SQL 注入, 并且无法将 var 解释为简单引号,因此将其连接或不使用 '' 在 PHP 中,一个 var 被解释为双引号。

【讨论】:

  • 看来我们越来越接近可行的结果了,感谢@bastien 的回答!但现在我遇到了 $_GET['id'] 没有检索到结果的问题。使用“var_dump($_GET)”我留下了“array(0) { }”
  • @ReConnected 尝试使用 myurl.html?id=12 取决于你的路由器 :)
【解决方案3】:
$result = mysql_query("SELECT * FROM table2 WHERE id='$theid'");

while($data = mysql_fetch_array($result)){
    echo $data['url'];

错误命名的表

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 2017-07-24
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2012-12-19
    • 1970-01-01
    相关资源
    最近更新 更多