Php 使用用户输入的安全MYSQL查询

Php 使用用户输入的安全MYSQL查询,php,mysql,php-5.5,Php,Mysql,Php 5.5,我只想检查我的PHP-MYSQL查询有多安全(如果有的话),我使用的是通过$\u POST获得的用户数据,然后进行验证-所有数据的验证过程包括在字符串和trim()上使用mysqli\u real\u escape\u string()。然而,我的一些输入的性质意味着我不限制用户输入的任何字符。我所做的是安全的,如果不是的话,如何改进 插入查询的示例(其中$name和$description是已通过验证函数的$u POST数据值。) select查询示例(其中$companyid是用户输入,re

我只想检查我的PHP-MYSQL查询有多安全(如果有的话),我使用的是通过$\u POST获得的用户数据,然后进行验证-所有数据的验证过程包括在字符串和trim()上使用mysqli\u real\u escape\u string()。然而,我的一些输入的性质意味着我不限制用户输入的任何字符。我所做的是安全的,如果不是的话,如何改进

插入查询的示例(其中$name和$description是已通过验证函数的$u POST数据值。)

select查询示例(其中$companyid是用户输入,real_转义并剥离)


提前感谢。

有一种叫做“SQL注入”的黑客,可以欺骗你的控制。阅读此处了解更多信息

以下是您的查询更新,以使用mysqli准备的语句

$sql    = "INSERT INTO `company` (`company_name`, `company_description`) VALUES(?, ?)";
$stmt   = $con->prepare($sql);
$stmt->bind_param('ss',$name,$description); // ss is for string string
$stmt->execute();
$result = $stmt->get_result();


您的查询根本不安全,您需要使用PDO或mysqli prepared语句感受SQL注入的后果,如果您不想处理它,那么read
mysqli\u real\u escape\u string
根本不会保护您的选择查询。您可以使用
$company=“1”或event\u company=2”进行尝试。如果数据库中有1和2,则两个都会出现。
    $sql = "SELECT * FROM events WHERE event_company=".$companyid."";
$result = mysqli_query($con, $sql);
$sql    = "INSERT INTO `company` (`company_name`, `company_description`) VALUES(?, ?)";
$stmt   = $con->prepare($sql);
$stmt->bind_param('ss',$name,$description); // ss is for string string
$stmt->execute();
$result = $stmt->get_result();
$sql    = "SELECT * FROM `events` WHERE `event_company` = ?";
$stmt   = $con->prepare($sql);
$stmt->bind_param('i',$companyid); // i indicates integer 
$stmt->execute();
$result = $stmt->get_result();