我正在尝试将两个输入值与来自MySQL表的SAME ROW中的两个值进行比较。 但我总是得到一条错误信息。这段代码有什么问题? (仅使用一个输入就可以正常工作)
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// escape variables for security
$numero_cedula = mysqli_real_escape_string($con, $_POST['numero_cedula']);
$codigo= mysqli_real_escape_string($con, $_POST['codigo']);
$sql1 = " SELECT Numero Cedula FROM Teste WHERE Numero Cedula=$numero_cedula
AND Chave=$codigo";
$objGet = mysqli_query($con, $sql1);
if( mysqli_num_rows($objGet) > 0 ) {
echo "Duplicate";
} else {
echo "Not a duplicate";
}
答案 0 :(得分:1)
虽然SQL中允许使用列名中的空格,但原因(在您的情况下)是因为列名Numero Cedula
包含空格:
v -- space v -- space
$sql1 = "SELECT Numero Cedula FROM Teste WHERE Numero Cedula=$numero_cedula
AND Chave=$codigo";
在反引号中包装列名时将其更改为以下内容:
$sql1 = "SELECT `Numero Cedula` FROM Teste WHERE `Numero Cedula`=$numero_cedula
AND Chave=$codigo";
另外,请确保$numero_cedula
和$codigo
都是整数,并且您的列也是int
类型。
如果不是,那么两者都需要用引号括起来。
I.e。:
$sql1 = "SELECT `Numero Cedula` FROM Teste WHERE `Numero Cedula`='$numero_cedula'
AND Chave='$codigo'";
将or die(mysqli_error($con))
添加到mysqli_query()
,这将显示SQL中的错误。
Numero_Cedula
。<强> 旁注: 强>
你写道:&#34;只用一个输入&#34; 就可以了。
您需要详细说明,以及您的表格是否包含两个单独的列,例如Numero
和 Cedula
或一个Numero Cedula
。
但是,使用此方法需要SQL injection。使用prepared statements或PDO with prepared statements。
洞察力:
还要确保您的表单元素已命名。
即:name="numero_cedula"
和name="codigo"
将错误报告添加到文件的顶部,这有助于查找错误。
error_reporting(E_ALL);
ini_set('display_errors', 1);
旁注:错误报告只应在暂存时完成,绝不能用于生产。
答案 1 :(得分:0)
您已创建包含空格的列名称。所以在SQL中它只考虑Numero作为列名。你能做的是。用后引号(`)括起你的列名。或者从列名中删除空格。
希望这会对你有所帮助。 :)