Closed. This question is off-topic。它目前不接受答案。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
四年前关闭。
我有一张桌子,可以放顾客。还有一个我负责销售的地方。
当我存了一些钱,我就继续卖客户的身份证,当我出现在名单上时,
我给顾客看身份证
问题是,在寻找销售时,不要让我一个人呆着,那些记录在案的客户会给我显示所有的记录
还有这个
但都不管用
和
另外,在您的第一个查询中,您正在使用联合,请确保该查询的两部分返回的列数相同。
更新
SQL注入的例子可以在internet上找到(包括在我链接到上面的php.net手册页上)。从您在OP中给出的示例来看,不清楚您是否正在清理数据,即:$_SESSION['k_username']和$name,因为您将它们直接包含在查询字符串中,所以这些可能是注入点。
例如,如果$name恰好是用户输入(例如来自搜索表单),并且用户提供:
现在,当在第二个查询中使用它时,查询字符串变为(仅使用123作为用户id的示例):
现在当查询运行时,用户表变为空。
当然,这只是一个例子。也许你的用户表不是“usuario”。。。事实仍然是,你有一个漏洞,它为有人渗透你的系统留下了一个漏洞。也许他们只会略过一些数据(用户名、密码、联系方式等),也许他们会注入自己的数据,也许他们会毁掉你的整个数据库,谁知道呢。你真的想冒这个险吗?
因此,下面是一个示例,说明如何使用准备好的声明来帮助降低风险:
这只是一个例子,还有其他的方法(在上面的链接中列出了一些例子)。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
四年前关闭。
我有一张桌子,可以放顾客。还有一个我负责销售的地方。
当我存了一些钱,我就继续卖客户的身份证,当我出现在名单上时,
我给顾客看身份证
问题是,在寻找销售时,不要让我一个人呆着,那些记录在案的客户会给我显示所有的记录
$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 ."%'";
但都不管用
最佳答案
欢迎来到这里。
我强烈建议你做一些关于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注入的例子可以在internet上找到(包括在我链接到上面的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();
这只是一个例子,还有其他的方法(在上面的链接中列出了一些例子)。