Я пытаюсь выбрать из таблицы MySQL, используя подготовленные операторы.Критерий выбора является вводом формы пользователя, поэтому я связываю эту переменную и использую подготовленные операторы.Ниже приведен код:
$sql_query = "SELECT first_name_id from first_names WHERE first_name = ?";
$stmt = $_SESSION['mysqli']->prepare($sql_query);
$stmt->bind_param('s', $_SESSION['first_name']);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows == '1') {
$stmt->bind_result($_SESSION['first_name_id']);
$stmt->fetch();
} else {
$stmt->close();
$sql_query = "INSERT INTO first_names (first_name) VALUES (?)";
$stmt = $_SESSION['mysqli']->prepare($sql_query);
$stmt->bind_param('s', $_SESSION['first_name']);
$stmt->execute();
$_SESSION['first_name_id'] = $_SESSION['mysqli']->insert_id;
}
$stmt->close();
Очевидно, мой код просто определяет, существует ли first_name в таблице first_names.Если это так, он возвращает соответствующий идентификатор (first_name_id).В противном случае код вставляет новое имя first_name в таблицу first_names и получает идентификатор insert_id.
Проблема в том, что пользователь вводит имя с помощью escape-символа ('Henry's).Не очень вероятно с именами, но, конечно, работодателей.Когда это происходит, код не выполняется (нет операции выбора или вставки в файлы журнала).Таким образом, кажется, что MySQL игнорирует код из-за escape-символа в переменной.
Как я могу исправить эту проблему?Является ли мой код выше эффективным и правильным для задачи?
Проблема № 2.Затем код продолжается с другой вставкой или обновлением, как показано в приведенном ниже коде:
if (empty($_SESSION['personal_id'])) {
$sql_query = "INSERT INTO personal_info (first_name_id, start_timestamp) VALUES (?, NOW())";
} else {
$sql_query = "UPDATE personal_info SET first_name_id = ? WHERE personal_info = '$_SESSION[personal_id]'";
}
$stmt = $_SESSION['mysqli']->prepare($sql_query);
$stmt->bind_param('i', $_SESSION['first_name_id']);
$stmt->execute();
if (empty($_SESSION['personal_id'])) {
$_SESSION['personal_id'] = $_SESSION['mysqli']->insert_id;
}
$stmt->close();
Проблема с кодом выше заключается в том, что я не могу заставить его работать вообще.Я не уверен, есть ли какой-либо конфликт с первой частью сценария, но я попробовал все, чтобы заставить его работать.Нет ошибок PHP и нет вставок или обновлений, показываемых в лог-файлах mySQL из этого кода.Похоже, что строка bind_param в коде может быть там, где сценарий умирает ...
Любая помощь будет очень признательна.