PHP PDO中的特殊字符Sqlite Query导致无法识别的令牌

I try to execute a query in PHP using PDO on Sqlite which may contain special characters (Ä,Ö,Ü,...). But I fail to execute the query. PHP returns the following Error:

array(3) { [0]=> string(5) "00000" [1]=> int(1) [2]=> string(35) "unrecognized token: "'MÄÖÜ123DE"" }

I tried to execute the query native and also in the way to use preparing statement and binding values.

$statement = "select * from list where param = ? and value = ?";
        $stmt = $db->prepare($statement);
        $stmt->bindValue(1, $setparam);
        $stmt->bindValue(2, $val,PDO::PARAM_STR);
        $stmt->execute();

Native way:

$statement = "select * from list where param = '".$setparam."' and value = '".$val."'";
        $res = $db->query($statement);

Both ways return the same error. I use XAMPP 1.8.3-5. The used coding ist UTF-8. In sqlitestudio the query works well.

EDIT Execute PDO:

$db = new PDO("sqlite:database/lists.db","","",array(
                PDO::ATTR_PERSISTENT => true));

The used UTF-8 HTML meta execution:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
dongmu1914
dongmu1914 我解决了这个问题。这是一个sqlite不是PHP的问题。这是我数据中的一个问题。
接近 6 年之前 回复
douxu3732
douxu3732 这听起来是对的,如果输入已经是UTF-8,那就多余了。如果可能,请提供可验证的示例。测试文字PHP字符串而不是表单输入。使用strlen(“Ä”)探测它是否真的是2个字节。Sqlite本身是二进制不可知的,只有表依赖于charset(如果它们是使用正确的PRAGMA创建的;也可以转储表.schema)。
接近 6 年之前 回复
dongzi0857
dongzi0857 使用PHP命令utf8_encode将输入转换为utf-8。
接近 6 年之前 回复
download1002
download1002 你如何设置你的PDO句柄?你实际使用哪个HTML页面字符集和<form>编码?输入看起来像拉丁-1子集。
接近 6 年之前 回复

1个回答



数据库仍然默认设置为使用ISO-8859-15。
尝试执行此查询,然后再执行任何其他修复 编码设置</ p>

  SET NAMES“utf8”
</ code> </ pre>
</ div>

展开原文

原文

It happen that the database still set by default to use ISO-8859-15. Try to execute this query before any other to fix encoding settings

SET NAMES "utf8"

douya7121
douya7121 抱歉,您的查询有误。 正确的陈述是:PRAGMA编码=“UTF-8;但它对我的问题没有任何影响。
接近 6 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问