【问题标题】:using variables in sql query in php [duplicate]在php中使用sql查询中的变量[重复]
【发布时间】:2021-01-09 11:06:23
【问题描述】:

所以我正在建立一个网站,我需要访问一个包含产品信息的表格

我用来导航到页面

<a href="productDetails.php?table=FeaturedProducts&id=1" >

然后在产品详细信息页面中我使用它来运行 php 查询

 <?php   

require "connection.php";

$table = $_GET["table"];
$id = $_GET["id"];

$sql = "select * from '.$table.' where ID  = '.$id.'";

$result = mysqli_query($conn, $sql);  
                  $row = mysqli_fetch_array($result);
    
    
    $pname= $row['Product_name'];



?>

这似乎不起作用,请告诉我如何做到这一点。

【问题讨论】:

  • 这能回答你的问题吗? Selecting data from SQL Server Using PHP
  • 参考:Bobby Tables 或更正式:SQL Injection。因此,请在继续之前阅读大量内容。
  • 从查询文本中删除所有单引号字符和点。或者用单引号向后替换外部 dquote 字符。
  • 我建议阅读字符串(以及连接如何工作)in the manual。这是您需要锁定的 PHP 的基本部分,否则您将在此过程中遇到更多问题。但是,在这种情况下,您应该使用参数化的prepared statements,而不是直接在查询中使用完全未转义的用户数据。 永远永远永远相信用户输入。
  • 正如其他人所说,这是构建查询的完全错误的方式。您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 给出了风险解释,以及如何使用 PHP / mysqli 安全地编写查询的一些示例。 切勿将未经处理的数据直接插入您的 SQL 中。按照您现在编写代码的方式,有人可以轻松窃取、错误更改甚至删除您的数据。

标签: php html mysql


【解决方案1】:

您在连接字符串时犯了错误。在此处查看您的代码:

$sql = "select * from '.$table.' where ID  = '.$id.'";

您尝试连接 $table 和 $id 变量。 (我们同意这是一个 SQL 注入问题)。

但 PHP 会像这样解释字符串结果:select * from '.FeaturedProducts.'其中 ID = '.1.'

因此,您的代码中不需要 ' 作为表名,它为您的值添加了点。因为 MySQL 确实会给你错误信息。

因此您的正确代码将是(并为使用准备语句进行修改以避免 SQL 注入):

$sql = "select * from $table where ID  = '$id'";

【讨论】:

  • 但要小心,这允许 SQL 注入。您应该在将变量放入数据库之前对其进行转义
  • 警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDOMySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your dataEscaping is not enough!
  • 是的,必须使用现代 SQL 函数来准备语句。
猜你喜欢
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多