为什么这不起作用:
function listOrderComments ($factnr){
global $connection;
//$factnr = 123; //or $factnr = "123"; (Both work)
$query = "SELECT * FROM orderstatus WHERE factuurnummer = '$factnr'";
$result = mysqli_query($connection, $query);
当我回复$factnr
时,我得到了" 123"回来。
当我取消评论//$factnr = 123;
时,我的功能正常运作。
到处寻找解决方案。检查类型$factnr
是否为(字符串)。
答案 0 :(得分:4)
如果您在查询中使用变量,那么您可以为自己打开注射攻击。
如果您要使用该变量,我建议您使用bind_param进行查询
阅读下面的PHP手册链接,您将能够找出问题
http://php.net/manual/en/mysqli-stmt.bind-param.php
如果你将一个变量传递给你的函数,它应该已经设置好,所以我不明白你为什么要将它设置为123
。因此,执行sql语句并在PHP文档页面上的第一个示例之后绑定参数。
public function listOrderComments ($factnr){
global $connection;
//$factnr = 123;
//or $factnr = "123";
$query = "SELECT * FROM orderstatus WHERE factuurnummer = ?";
$sql->prepare($query);
$sql->bind_param("s", $factnr);
$sql->execute();
$result = $sql->get_result();
$data = mysqli_fetch_all($result, MYSQLI_ASSOC);
foreach ($data as $row) {
print_r($row);
}
然后用结果做你想做的事
答案 1 :(得分:1)
你可以选择:
$query = "SELECT * FROM orderstatus WHERE factuurnummer = ". $factnr;
答案 2 :(得分:0)
正确使用"溺爱" CONCAT。以下将正常工作:
$factnr = 123;
$query = "SELECT * FROM orderstatus WHERE factuurnummer = " . $factnr;
<强>更新强>
这里是$ factnr传递的参数应该是整数。安全代码的方式是不要使用havvy函数,甚至不要使用更多的complicated
PDO,但只需验证,这个变量是否为整数与否之前,如果不是整数,则返回一些错误代码。这样就没有代码注入SQL查询的危险。
function listOrderComments ($factnr){
global $connection;
if (!is_int($factnr)) return -1
//$factnr = 123; //or $factnr = "123"; (Both work)
$query = "SELECT * FROM orderstatus WHERE factuurnummer = " . $factnr;
$result = mysqli_query($connection, $query);
答案 3 :(得分:0)
连接代码不是好习惯。您最好的解决方案是使用PDO statements。这意味着您的代码更容易查看,如果恶意代码在您的验证中滑落,这可以防止SQL注入发生。
以下是您将使用的代码示例。
<?php
// START ESTABLISHING CONNECTION...
$dsn = 'mysql:host=host_name_here;dbname=db_name_here';
//DB username
$uname = 'username_here';
//DB password
$pass = 'password_here';
try
{
$db = new PDO($dsn, $uname, $pass);
$db->setAttribute(PDO::ERRMODE_SILENT, PDO::ATTR_EMULATE_PREPARES);
error_reporting(0);
} catch (PDOException $ex)
{
echo "Database error:" . $ex->getMessage();
}
// END ESTABLISHING CONNECTION - CONNECTION IS MADE.
$factnr = "123" // or where-ever you get your input from.
$query = "SELECT * FROM orderstatus WHERE factuurnummer = :factnr";
$statement = $db->prepare($query);
// The values you wish to put in.
$statementInputs = array("factnr" => $factnr);
$statement->execute($statementInputs);
//Returns results as an associative array.
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
$statement->closeCursor();
//Shows array of results.
print_r($result);
?>