我有一个表(core_customer_information),我想在php中创建一个SQL查询,它使用变量$ code并更新表中的激活字段。
$code = mysqli_real_escape_string($conn, $_GET['code']);
$check = mysqli_query("SELECT * FROM core_customer_information WHERE activation_code='$code' AND activated='1' ");
if ( mysqli_num_rows($check) == 1)
{
die ('The account has already been activated');
}
else
{
$activate = mysqli_query("UPDATE core_customer_information SET activated='1' WHERE activation_code='$code'");
echo ('Your account has know been activated <br>');
echo $code;
}
首先,我检查激活是否等于1,在这种情况下,帐户被归类为激活,如果没有,我然后创建一个UPDATE查询来更新该类的激活字段。
我的问题是查询没有更新我的表格,我不确定问题出在哪里。
如果有人能帮我看一下,我将不胜感激。
答案 0 :(得分:0)
从你的问题中你不会完全清楚你将使用什么语言来启动SQL查询(因为目前唯一的标签是sql和mysql ......)
但是如果语言类似于Java,那么你可以使用类似于Java的PreparedStatement。 (见https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html)
PreparedStatement比将动态变量简单连接到sql Strings更安全。
答案 1 :(得分:0)
我建议您使用mysqli_real_escape_string,因为它会在考虑到页面所述的当前连接字符集的情况下转义字符串:
此函数用于创建可在SQL语句中使用的合法SQL字符串。给定的字符串被编码为转义的SQL字符串,并考虑了连接的当前字符集。
要防止大多数mysql注入方法,您应该执行以下操作:
$code = mysqli_real_escape_string($link, $_GET['code']);
如果您应该使用ADODB或其他适配器,我建议您使用预准备语句及其防止SQL注入的方法。