Добро пожаловать в СО.
Я бы очень рекомендовал вам провести некоторое исследование на 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 ."%'
";
Кроме того, в первом запросе вы используете соединение, пожалуйста, убедитесь, что обе части этого возвращения запроса такое же количество столбцов.
UPDATE
Примеры SQL инъекций можно найти по всему Интернету (в том числе на странице php.net ручного я связан выше). Из примера, который вы указали в OP, неясно, обрабатываете ли вы свои данные, а именно: $ _SESSION ['k_username'] и $ name, и поскольку вы включаете их непосредственно в строку запроса, это могут быть точки впрыска.
Например, если $ название происходит с пользовательским вводом (скажем, с помощью поисковой формы) и принадлежности пользователя:
x'; DELETE FROM usuario WHERE 1=1; --
Теперь, когда это используется в вашем втором запросе, строка запроса будет (только используя 123 для идентификатора пользователя в качестве примера):
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();
Это просто пример, есть и другие способы (некоторые примеры, приведенные в ссылках выше).
Вам понадобится '$ _SESSION [k_username]' в кавычках, например 'idusuario = '$ _SESSION [k_username]'' Какова структура таблицы? – chris85
@ chris85 Строго, да, но PHP позволяет избежать этого. К сожалению. –
Я имею в виду как строку SQL. Я должен отредактировать, я думаю .. – chris85