将两个输入与数据库数据进行比较:错误

时间:2014-10-18 02:04:06

标签: php mysql

我正在尝试将两个输入值与来自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";
}

2 个答案:

答案 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 statementsPDO with prepared statements


洞察力:

还要确保您的表单元素已命名。

即:name="numero_cedula"name="codigo"

将错误报告添加到文件的顶部,这有助于查找错误。

error_reporting(E_ALL);
ini_set('display_errors', 1);

旁注:错误报告只应在暂存时完成,绝不能用于生产。

答案 1 :(得分:0)

您已创建包含空格的列名称。所以在SQL中它只考虑Numero作为列名。你能做的是。用后引号(`)括起你的列名。或者从列名中删除空格。

希望这会对你有所帮助。 :)