gpt4 book ai didi

当查询包含 php 变量时,php mysqli 查询函数不执行

转载 作者:行者123 更新时间:2023-11-29 19:09:51 26 4
gpt4 key购买 nike

我真的很需要一些帮助。我试图从表中返回一条记录,在该表中我按名字和姓氏搜索该表,这是 php 变量 $employee_coor 中的一个字符串。

这个问题是当我在查询语句中使用该变量时它什么也不返回。没有错误什么都没有。但是,如果我将变量回显到屏幕,则会看到员工的全名。然后我尝试将该全名复制到语句中,然后将返回记录。

我还在查询中尝试了 mysqli_num_rows 来确定是否选择了记录,并且在回显到屏幕时返回 0。

我真的不知道为什么我会得到这个,我希望这是我忽略的东西或类似的东西。下面的代码显示了该脚本。

更新:我在 MySQL 客户端中测试了确切的查询本身,它运行得很好。唯一的区别是 MySQL 中的查询 q 应该有一个全名,而不是代表该名称的 php 变量。

    <?php
include_once('dbconnect.php');

if (!empty($_GET['employees'])) {

$employee_coor = $_GET['employees'];

$select = "SELECT * FROM employees
WHERE employees.employee_fname = substring_index('$employee_coor',' ',1)
AND employees.employee_lname = substring_index('$employee_coor',' ',-1)";

$query = mysqli_query($con,$select);

$cooridinator = mysqli_fetch_assoc($query);

var_dump($cooridinator);

} else{}
?>

最佳答案

盯着构建 SQL 查询的 PHP 代码并尝试诊断 SQL 查询出了什么问题是很困难的。为什么这么难?

如果你对 SQL 语句有疑问,你应该打印出 SQL 并查看 SQL,而不是构建 SQL 的 PHP。我的意思是最终的 SQL 字符串,在将 PHP 变量复制到其中之后。一旦您查看最终查询,它可能会更清楚为什么它不起作用。

$select = "SELECT * FROM employees 
WHERE employees.employee_fname = substring_index('$employee_coor',' ',1)
AND employees.employee_lname = substring_index('$employee_coor',' ',-1)";

error_log($select);

尝试复制最终的 SQL 并在 MySQL 客户端中尝试。它给出零行吗?为什么?尝试编辑查询并删除 WHERE 子句的一项,然后删除另一项。这些给出零行吗?

你明白了。 测试,不要猜测。

无论如何,您的代码还有另一个问题:它容易受到 SQL 注入(inject)的攻击。即使您尝试处理一个名为“O'Reilly”的人,它也会破产。

我建议在将变量应用于 SQL 语句之前在 PHP 中拆分该变量,并使用绑定(bind)参数。

$employee_coor = explode(' ', $_GET['employees']);

$select = "SELECT * FROM employees
WHERE employees.employee_fname = ?
AND employees.employee_lname = ?";

$stmt = mysqli_prepare($con,$select);
mysqli_stmt_bind_param($stmt, 'ss',
array_shift($employee_coor),
array_pop($employee_coor));
mysqli_stmt_execute($stmt);

关于当查询包含 php 变量时,php mysqli 查询函数不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43171629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com