SQLSTATE [22018]:强制转换规范

时间:2016-01-03 18:48:58

标签: php ms-access pdo

Greetins,我在使用PDO功能时遇到了一些麻烦。

我的代码:

while (($data = fgetcsv($handle, 1000, ",", "'")) !== FALSE) {
        if($i > 0) {
            $data = str_replace('"', '', $data); 
            $myDate =  date("Y/m/d",strtotime(str_replace('-','-',$data[0])));
            $data = str_replace(' ', '', $data);
            $lastname = $data[1];
            $firstname = $data[2];
            $showdata = $db->prepare("SELECT userID FROM users WHERE firstname LIKE '%$firstname%' AND lastname LIKE '%$lastname%'");
            $showdata->execute();
            $rowas= $showdata->fetch(PDO::FETCH_ASSOC);
            $userioID = $rowas['userID'];

            $removals=$db->prepare("DELETE FROM late WHERE userID = '$userioID' AND dateandtime= '$myDate' ;");
            $removals->execute();


            $import->bindParam(1, $myDate, PDO::PARAM_STR);                      
            $import->bindParam(2, $data[4], PDO::PARAM_STR);
            $import->bindParam(3, $rowas['userID'], PDO::PARAM_STR);                
            $import->execute();
        }
        $i++;
    }

没有删除部分,一切正常。使用删除 - 我收到错误: SQLSTATE [22018]:强制转换规范的字符值无效:-3030 [Microsoft] [ODBC Microsoft Access驱动程序]条件表达式中的数据类型不匹配。 (SQLExecute [-3030]在ext \ pdo_odbc \ odbc_stmt.c:254)

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您正在将字符串与整数进行比较。这不起作用。

userID = '$userioID'

如果“userID”是一个int,则无法将其与字符串“1”进行比较。 这样的事情可能有用:

userID = $userioID

我还会考虑在所有SQL查询中使用bindParam方法。