gpt4 book ai didi

php - Postgres/PHP PDO::PDOStatement->bindParam() 到 character(1) 字段

转载 作者:行者123 更新时间:2023-11-29 13:37:52 24 4
gpt4 key购买 nike

我有类似下面的代码:

$data['someField'] = (isset($_POST['someField'])) ? 'Y' : 'N';
$stmt = $db->prepare("INSERT INTO public.someTable (someField) VALUES (':someField');");
$stmt->bindParam(':someField', ($data['someField']), PDO::PARAM_STR, 1);
$db->beginTransaction();
$stmt->execute();
$db->commit();

该字段是一个包含 Y 或 N 的字符 (1)(我宁愿使用 bool/int(1),但不幸的是我无法更改它)。如您所见,这从 HTML 表单获取 POST 数据并根据复选框设置 Y 或 N。当我回应它时,该变量看起来设置正确。如果我手动将“Y”或“N”放入语句中,则查询有效,但是在使用 bindParam() 时出现以下错误:

SQLSTATE[22001]: String data, right truncated: 7 ERROR: value too long for type character(1)

真正奇怪的是即使我做这样的事情:

$stmt->bindParam(':someField', substr($data['someField'], -1), PDO::PARAM_STR, 1);

我仍然得到错误。来自 php.net 功能页面上的用户评论:

Steve M 19-Nov-2009 07:28 Note that when using PDOStatement::bindParam an integer is changed to a string value upon PDOStatement::execute(). (Tested with MySQL).

没有进一步提及这一点,也没有任何关于如何绕过它的内容。我假设这是问题的根源。我也尝试过使用 bindValue() 而不做任何更改。

最佳答案

在这里找到了这个问题的答案:String encoding problem on PdoStatement->bindParam()?

基本上 PDO 会自动为您转义参数,所以当我进行查询时:

"INSERT INTO public.someTable (someField) VALUES (':someField');"

一旦 PDO 完成,它最终看起来像这样:

"INSERT INTO public.someTable (someField) VALUES (''Y'');"

prepare() 函数的正确用法是:

$stmt = $db->prepare("INSERT INTO public.someTable (someField) VALUES (:someField);");

关于php - Postgres/PHP PDO::PDOStatement->bindParam() 到 character(1) 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3971029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com