我正在尝试将两个输入值与 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";
}
最佳答案
尽管 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
。
旁注:
您写道:“只需一个输入即可正常工作”。
您需要详细说明这一点,以及您的表格是否包含两个单独的列,例如 Numero
和 Cedula
或一个 Numero塞杜拉
。
但是,使用此方法受制于SQL injection .使用 prepared statements , 或 PDO with prepared statements .
洞察力:
还要确保您的表单元素已命名。
即:name="numero_cedula"
和 name="codigo"
将错误报告添加到文件顶部,这将有助于查找错误。
error_reporting(E_ALL);
ini_set('display_errors', 1);
旁注:错误报告只应在暂存阶段进行,绝不能用于生产。
关于php - 比较两个输入与数据库数据 : error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26435616/