我正在尝试使用预准备语句从mySQL表中进行选择。 select critera是用户表单输入,所以我绑定了这个变量并使用预处理语句。以下是代码:
$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_names表中是否已经存在first_name。如果是,则返回相应的ID(first_name_id)。否则,代码将新的first_name插入first_names表并获取insert_id。
问题是用户输入带有转义字符的名称('Henry')。不太可能有名字,但肯定是雇主。发生这种情况时,代码不会执行(日志文件中没有选择或插入活动)。因此,由于变量中存在转义字符,似乎mySQL忽略了代码。
如何解决此问题?我的代码高效且正确吗?
问题#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行可能是脚本死亡的地方......
非常感谢任何帮助。