2014-10-18 67 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作爲列名。你可以做的是。用反引號(`)括起你的列名。或從列名稱中刪除空格。

希望這可以幫助你。 :)