我有一张桌子,我会留住顾客。另一个我继续销售的地方。
当我保存一些时,我会继续销售客户ID,当我在列表中显示时, 我向客户展示了身份
问题是,在寻找销售时不要让我一个人记录的客户端显示我的所有记录
$query = "SELECT *
FROM ventas
WHERE idusuario = $_SESSION[k_username]
union
SELECT *
FROM reparaciones
WHERE marca LIKE '%" . $name . "%'
OR modelo LIKE '%" . $name ."%'" ;
这个
$query="SELECT *
FROM ventas
WHERE idusuario = $_SESSION[k_username]
marca LIKE '%" . $name . "%'
OR modelo LIKE '%" . $name ."%'";
但它们都不起作用
答案 0 :(得分:2)
欢迎来到SO。
我强烈建议您对SQL Injection和Prepared Statements进行一些研究。我将按原样解决您的问题,而不考虑您当前设置安全漏洞的方式。
您的查询字符串无效,请尝试以下操作:
$query = "SELECT *
FROM ventas
WHERE idusuario = '". $_SESSION['k_username'] ."'
UNION
SELECT *
FROM reparaciones
WHERE marca LIKE '%". $name ."%'
OR modelo LIKE '%". $name ."%'
";
和
$query = "SELECT *
FROM ventas
WHERE idusuario = '". $_SESSION['k_username'] ."'
OR marca LIKE '%". $name ."%'
OR modelo LIKE '%". $name ."%'
";
此外,在您的第一个查询中,您正在使用联合,请确保该查询的两个部分返回相同数量的列。
<强>更新强>
SQL注入的例子可以在互联网上找到(包括我上面链接的php.net手册页)。从您在OP中提供的示例中,不清楚您是否正在清理数据,即:$ _SESSION ['k_username']和$ name,并且当您将这些直接包含在查询字符串中时,这些可能是注入点。
例如,如果$ name恰好是用户输入(例如来自搜索表单)并且用户提供:
x'; DELETE FROM usuario WHERE 1=1; --
现在,当您在第二个查询中使用它时,您的查询字符串变为(仅使用123作为示例的用户ID):
SELECT * FROM ventas WHERE idusuario = 123 OR marca LIKE '%x'; DELETE FROM usuario WHERE 1=1; --%' OR modelo LIKE '%". $name ."%'
现在,当该查询运行时,您的用户表变为空。
这当然只是一个例子。也许你的用户表没有被称为'usuario'......事实仍然是你有一个漏洞,它留下了一个让某人渗透你的系统的空缺。也许他们只会浏览一些数据(用户名,密码,联系信息等),也许他们会注入自己的数据,也许他们会破坏整个数据库,谁知道。你真的想冒这个风险吗?
以下是一个如何使用预准备语句来帮助降低风险的示例:
$sql = "SELECT *
FROM ventas
WHERE idusuario = :userid
OR marca LIKE ':name'
OR modelo LIKE ':name'
";
$params = array(
'userid' => $_SESSION['k_username'],
'name' => '%'. $name .'%'
);
$db = new PDO(...); // replace ... with your connection info
$query = $db->prepare($sql);
$query->execute($params);
$results = $query->fetchAll();
这只是一个例子,还有其他方法(上面链接中列出了一些例子)。
答案 1 :(得分:0)
您是否在查询字符串中尝试了嵌入变量的括号(如此)?
$query="SELECT * FROM ventas WHERE idusuario = {$_SESSION[k_username]} marca LIKE '%" . $name . "%' OR modelo LIKE '%" . $name ."%'";
答案 2 :(得分:0)
感谢所有恶魔
这解决了
$query = "SELECT * FROM `ventas` WHERE `marca` LIKE '%" . $name ."%' AND `idusuario` = 2 ORDER BY `idusuario` ASC ";
但现在的问题是
而不是idusuario
= 2我想要像
$query = "SELECT * FROM `reparaciones` WHERE `marca` LIKE '%" . $name ."%' AND `idusuario` = $_SESSION[k_username] ORDER BY `idusuario` ASC ";
谢谢:)
答案 3 :(得分:0)
解决了yopeeee :)非常感谢大家
cat1 dog1 dog2
0 red red blue
2 blue red blue
3 blue blue green