比较从SQL Server数据库问题检索的php中的字符串

时间:2019-06-30 20:14:55

标签: php sql-server sql-server-2008

我正在使用SQL Server数据库,其中我的一个表的列类型为 VARCHAR(MAX)。在此专栏中,我存储了BASE64字符串。

应用程序的基本流程是:

  1. 获取指纹数据。
  2. 将其编码为BASE64字符串。
  3. 通过使用PHP将其存储到SQL服务器数据库中

    3a。从数据库中检索所有指纹

    3b。用从数据库接收到的所有指纹检查要插入的指纹数据

    3c。如果有任何指纹与之匹配,则返回false     如果任何指纹不匹配,则返回true

  4. 如果返回值为true,则通过以下查询插入指纹;如果为false,则显示错误。

    INSERT INTO EMPTABLE ( Finger_Data ) values (  CONVERT( VARCHAR(MAX) , 
    $Finger_Data ) )
    

要在第3步获取并检查指纹,请使用以下代码。

 $sqlString = "SELECT  CAST( Finger_Data AS VARCHAR(MAX)) AS FINGER FROM 
 EMPTABLE ";

 $stmt = $this->conn->prepare($sqlString);
            $stmt->execute();
            $data = $stmt->fetchAll();

  if ($stmt->rowCount() > 0) {

     if ($data) {
         foreach ($data as $row) {

                        $found = false;

                        if ($Finger_Data === $row['FINGER']){

                            echo "\n >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
                            Duplicate found <<<<<<<<<<<<<<<< \
                            $found = true;

                        }

                        if($found){
                            echo "\n >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
                            Implementing found <<<<<<<<<<<<<<<< \
                        }

         }

    }

  }

我的问题是,我根本无法比较这两个字符串。 当我打印这两个变量时,我看到它们等于80%,而其他 字符串的一部分不匹配。但是当我直接检入数据库时 数据正确显示,这意味着使用PHP进行读取或编写内容。

1 个答案:

答案 0 :(得分:0)

只有当您一次又一次拥有相同的指纹图像时,您才能在SQL中进行比较,只有这样才能使它匹配。但是实际上,当您两次获得指纹时,两张图像都会彼此不同,并且位置变化,角度变化和扫描质量都会有所变化。因此无法进行字符串比较。

所有扫描仪均提供用于捕获指纹并比较指纹(1:1)的SDK,可用于开发桌面应用程序。如果需要在服务器上比较扫描的图像,则需要实现自己的自动手指识别算法,或者必须使用第三方服务,例如

  1. CAMS
  2. M2Sys
  3. Neurotechnology