mysql: апостроф не читается из столбца varchar в базе данных?

у меня есть следующая таблица для new_supplier_request:

Id  |  ref  |  User   |  Manager (Varchar)
1      12      James     Henry O'Brien

У меня также есть моя таблица internal_users:

 Id  |    User_firs_name   |  user_last_name(Varchar)
1        Henry               O'Brien

я использую следующий запрос mysql, чтобы дать разрешение менеджера (который вошел в систему) для просмотра некоторого контента, если имя менеджера появляется для этой строки данных в столбце менеджера моей таблицы new_supplier_request

$_SESSION['username'] = internal_users.user_first_name
$_SESSION['username2'] = internal_users.user_last_name
$user = $_SESSION['username']." ".$_SESSION['username2'];

$sql34 = "select * from new_supplier_request, internal_users where new_supplier_request.status!= 'complete' and new_supplier_request.action_taken ='none' AND new_supplier_request.user_id = internal_users.user_id AND requestee_manager = '$user'";
$result = $conn->query($sql34);

По какой-то причине это работает нормально, если фамилия не содержит апостроф, но поскольку фамилия этого менеджера — О’Брайен, по какой-то причине, когда я проверяю в своем запросе, он терпит неудачу, потому что испытывает затруднения при чтении апострофа в имени, если я поменяю фамилию Генри на что-то вроде Джеймса, то это сработает. Может кто-нибудь объяснить, пожалуйста, что я делаю не так? Спасибо

0

Решение

Проверьте это:

$_SESSION['username'] = mysqli_real_escape_string($conn, internal_users.user_first_name);
$_SESSION['username2'] = mysqli_real_escape_string($conn, internal_users.user_last_name);
0

Другие решения

Вы должны рассмотреть возможность использования PDOПодготовлены заявления со связанными параметрами.

Таким образом, ваши запросы будут безопаснее, и многие проблемы со строковыми параметрами должны быть решены.

$query = $pdo->prepare('
select *
from new_supplier_request, internal_users
where new_supplier_request.status <> :status
and new_supplier_request.action_taken = :action_taken
AND new_supplier_request.user_id = internal_users.user_id
AND requestee_manager = :user
');

$query->bindValue(':status', 'complete');
$query->bindValue(':action_taken', 'none');
$query->bindValue(':user', $user);

$query->execute();

$results = $query->fetchAll();
1

Проходить $conn->real_escape_string($user) вместо $user в запросе. Вы НИКОГДА не должны использовать значения переменных непосредственно в запросе, не применяя тип или не экранируя их, так как вы оставите код уязвимым для атак SQL-инъекций.

введите описание изображения здесь

0