2014-10-18 86 views
2

我想从一个MySQL表中比较两个输入值与来自同一行的两个值。 但我总是收到一条错误消息。这段代码有什么问题? (它只用一个输入就可以正常工作)比较两个输入与数据库数据:错误

// 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

什么是错误? – 2014-10-18 02:10:49

+0

@getlost,这是一个总是意味着我的代码中有语法错误的错误。更具体地说: 内部服务器错误 服务器遇到内部错误或配置错误,无法完成您的请求。 – 2014-10-18 02:14:39

+0

@manuelmourato请参阅下面的[**我的答案**](http://stackoverflow.com/a/26435995/1415724)。 – 2014-10-18 04:03:03

回答

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类型。

如果它们不是,那么两者都需要用引号括起来。

即:

$sql1 = "SELECT `Numero Cedula` FROM Teste WHERE `Numero Cedula`='$numero_cedula' 
    AND Chave='$codigo'"; 

添加or die(mysqli_error($con))mysqli_query()它会显示你在SQL错误。

  • 您还可以使用下划线将数据库中的列重命名为Numero_Cedula

旁注:

您写道:“它好工作只有一个输入”

您需要详细说明这一点,无论你的表中包含两个单独列如NumeroCedula或一个Numero Cedula


但是,使用此方法需遵从SQL injection。使用prepared statementsPDO with prepared statements


见识:

另外,还要确保你的表单元素命名。

I.e.:name="numero_cedula"name="codigo"

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

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

旁注:错误报告只应在分期进行,决不进行生产。

+0

它像一个魅力,非常感谢你! – 2014-10-18 12:07:12

+0

@manuelmourato非常欢迎Manuel。 – 2014-10-18 14:09:31

0

您已经创建了一个带空格的列名。所以在SQL中它将只考虑Numero作为列名。你可以做的是。用反引号(`)括起你的列名。或从列名称中删除空格。

希望这可以帮助你。 :)