我有一个不适合我的MySQL声明。我检查了代码的几个部分,但结果却一直返回null。我也试过替换WHERE enc_mail = AND enc_public_id=" to "WHERE 1"
以检查它是否是变量的问题,但事实并非如此。我也没有得到错误。
$connect_db = mysqli_connect("myhost","my username","my password","my db");
$mail_id = crypto(mysqli_real_escape_string($connect_db,htmlspecialchars($_GET['em'])),'e');
$public_id = mysqli_real_escape_string($connect_db,htmlspecialchars($_GET['public']));
$active_true = true;
$check = $connect_db->prepare("SELECT active FROM enc_data WHERE enc_mail=? AND enc_pub_id=?");
$check->bind_param("ss", $mail_id, $public_id);
$active = $check->execute();
if($active[0]=="" ){
//It goes here once the code is run
}
答案 0 :(得分:1)
您需要应用bind_result
然后fetch
使用预准备语句时,escape_string
绝对没有理由,因为@GrumpyCrouton说
我建议您切换到PDO,因为它更直接
答案 1 :(得分:1)
我同意@Akintunde你不应该在查询参数上使用转义和htmlspecialchars。使用查询参数时,转义是多余的。 htmlspecialchars就是当你输出内容到HTML时,而不是输入到SQL。
您不一定要使用bind_result()来进行mysqli查询。您可以从预准备语句中获取结果对象,然后在结果对象上使用fetch方法来获取连续的行。
以下是我编写代码的方法:
// makes mysqli throw exceptions if errors occur
mysqli_report(MYSQLI_REPORT_STRICT);
$connect_db = new mysqli("myhost", "my username", "my password", "my db");
$mail_id = $_GET['em'];
$public_id = $_GET['public'];
$active_true = true;
$sql = "SELECT active FROM enc_data WHERE enc_mail=? AND enc_pub_id=?";
$stmt = $connect_db->prepare($sql);
$stmt->bind_param("ss", $mail_id, $public_id);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
if($row["active"]=="" ){
//It goes here once the code is run
}
}
但实际上我更喜欢使用PDO而不是mysqli,所以我想这不是真的我将如何写OP的代码。 : - )