我真的很想得到一些帮助。我试图从一个表中返回一条记录,我在那里用名字和姓氏搜索该表,这是一个php变量$ employee_coor中的一个字符串。
这个问题是当我在查询语句中使用变量时它什么都不返回。没有任何错误。但是,如果我将变量回显到屏幕,则会看到员工的全名。然后我尝试将该全名复制到语句中,然后返回记录。
我还在查询上尝试了mysqli_num_rows以确定是否正在选择记录,并且当回显到屏幕时它返回0。
我真的不知道为什么我会这样,我希望这是我过度看的东西或类似的东西。下面的代码显示了脚本。
UPDATE :我在MySQL客户端测试了确切的查询本身,它运行得很好。唯一的区别是MySQL中的查询要有一个全名,而不是代表该名称的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{}
?>
答案 0 :(得分:0)
我认为您的问题是您尝试在SELECT语句中执行substring_index()。你不能这样做。最好的办法是在SELECT语句中使用它们之前将员工名称拆分为2个变量。
答案 1 :(得分:0)
首先你做$ employee_coor = substring_index($ _ GET ['employees'],'',1);
您可以添加“。$ employee_coor。”,例如:
$select = "SELECT * FROM employeesWHERE employees.employee_fname = '" . $employee_coor . "' AND employees.employee_lname = '" . $employee_coor . "')";
或者您可以这样做:{$ employe_coor},例如:
$select = "SELECT * FROM employees WHERE employees.employee_fname = '{$employee_coor}' AND employees.employee_lname = '{$employee_coor}'";
或者最简单的方式:'$ employe_coor':
$select = "SELECT * FROM employees WHERE employees.employee_fname = '$employee_coor' AND employees.employee_lname = '$employee_coor'";
完整示例:
<?php
include_once('dbconnect.php');
if (!empty($_GET['employees'])) {
$employee_coor = substring_index($_GET['employees'], ' ', 1);
//$select = "SELECT * FROM employees WHERE employees.employee_fname = '$employee_coor' AND employees.employee_lname = '$employee_coor'";
//$select = "SELECT * FROM employeesWHERE employees.employee_fname = '" . $employee_coor . "' AND employees.employee_lname = '" . $employee_coor . "')";
$select = "SELECT * FROM employees WHERE employees.employee_fname = '{$employee_coor}' AND employees.employee_lname = '{$employee_coor}'";
$query = mysqli_query($con, $select);
$cooridinator = mysqli_fetch_assoc($query);
var_dump($cooridinator);
} else {
//code
}
&GT;
答案 2 :(得分:0)
很难盯着构建SQL查询的PHP代码,并尝试诊断SQL查询的错误。为什么要这么难?
如果您对SQL语句有疑问,应该打印SQL并查看SQL,而不是构建SQL的PHP。我指的是在将PHP变量复制到其中之后的最终SQL字符串。一旦你看到最终查询为什么它不起作用,它可能会更清楚。
$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注入攻击。即使你试图处理一个名为&#34; O&#39; Reilly的人,它也会收支平衡。&#34;
我建议在将变量应用于SQL语句之前在PHP中拆分变量,并使用绑定参数。
$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);