为什么这不起作用:
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
为(字符串)。
好吧,如果您在查询中使用变量,那么您将面临注入攻击。
如果您要使用该变量,我建议您使用bind_param进行查询
阅读下面的PHP手册链接,您将能够找出问题所在
http://php.net/manual/en/mysqli-stmt.bind-param.php
如果您将变量传递给您的函数,它应该已经设置好了,所以我不明白您为什么要将其设置为123
。因此,执行 sql 语句并按照 PHP 文档页面上的第一个示例绑定参数。
public function listOrderComments ($factnr)
{
global $connection;
$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);
}
}
然后对结果做你想做的事
你可以选择:
$query = "SELECT * FROM orderstatus WHERE factuurnummer = ". $factnr;
连接代码不是好的做法。最好的解决方案是使用 PDO 语句。这意味着您的代码更容易查看,这可以防止恶意代码通过验证时发生 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);
?>
在"点缀"连接上正确使用它。以下工作正常:
$factnr = 123;
$query = "SELECT * FROM orderstatus WHERE factuurnummer = " . $factnr;
更新:
这是$factnr作为应该是整数的参数传递的。安全的代码方式是不要使用havvy函数,即使经过更多的PDOcomplicated
,而只是在对它进行任何操作之前验证这个变量是否是整数,如果不是整数,则按函数返回一些错误代码。这里没有将代码注入 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);