SQLSTATE[22018]:强制转换规范的字符值无效

Posted

技术标签:

【中文标题】SQLSTATE[22018]:强制转换规范的字符值无效【英文标题】:SQLSTATE[22018]: Invalid character value for cast specification 【发布时间】:2016-01-03 18:48:57 【问题描述】:

大家好,我在使用 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++;
    

如果没有 removals 部分,一切正常。删除 - 我收到错误::-3030 [Microsoft][ODBC Microsoft Access Driver] 标准表达式中的数据类型不匹配。 (SQLExecute[-3030] at ext\pdo_odbc\odbc_stmt.c:254)

任何帮助将不胜感激。

【问题讨论】:

删除中的用户ID部分似乎有问题...任何人都可以建议? 您处理的字符串值是否包含 Unicode 字符而不是纯 ASCII 字符? userID 值是简单的数字。 很明显,删除中的用户 ID 语法有问题,但无法找到确切的内容。 【参考方案1】:

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

userID = '$userioID'

如果“userID”是一个 int,则不能将它与像 '1' 这样的字符串进行比较。 这样的事情可能会奏效:

userID = $userioID

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

【讨论】:

以上是关于SQLSTATE[22018]:强制转换规范的字符值无效的主要内容,如果未能解决你的问题,请参考以下文章

访问 2000 - 强制转换规范 (#0) 的无效字符值 - 访问 SQL

(fast_executemany = True) 错误“[ODBC Driver 17 for SQL Server]强制转换规范 (0) (SQLExecute)'的字符值无效”)

JAVA笔记---JVM内存图;方法重载条件;输入方法;转义字符;强制类型转换;变量分类及区别;Java命名规范;

Error!: SQLSTATE[00000] [1040] Too many connections是啥意思

Js中的假值_ES5中定义的ToBoolean方法强制类型转换后值为false

分享一篇阿里的mysql规范