【问题标题】:How to store special characters in Oracle Database using PHP如何使用 PHP 在 Oracle 数据库中存储特殊字符
【发布时间】:2021-07-06 23:32:18
【问题描述】:

我想在 oracle sql 中存储特殊字符,如 á、é、ő 等。我该怎么做?每个角色都变成了??当我选择它们时。从未使用过 oracle sql,这对我来说真的很痛苦。

PHP 代码:

$id = $_POST['id'];
$comment = $_POST['comment-content'];
$username = $_SESSION['username'];

$q = "INSERT INTO hozzaszolasok (username, image_id, content, date_added) VALUES ('$username',$id,'$comment',(SELECT sysdate FROM dual))";
$s = oci_parse($c, $q);
oci_execute($s);

oci_free_statement($s);
oci_close($c);

echo '<script>window.location.href = "comments.php?id=' . $id . '";</script>';

【问题讨论】:

  • 可能需要在连接$c上设置字符集。您看起来对使用此代码的 SQL 注入持开放态度。变量/用户输入不应在 SQL 中。
  • 不要使用这样的插入查询。您可以接受 sql 注入。使用参数
  • 为什么是(SELECT sysdate FROM dual)?只需使用sysdate
  • 字符变成 ??或者您的客户端和数据库之间的字符集可能存在差异。检查数据库字符集是否支持多字节字符。 AL32UTF8 就是这样一种字符集。
  • (1) Pass the values as bind variables, (2) 检查数据库实际上没有正确存储它们,不仅它们存储正确,而且当您查看时用户界面没有显示它们正确; (3) 如果您已经完成了 1 和 2,但仍然无法正常工作,请尝试使用 NVARCHAR2 数据类型而不是 VARCHAR2

标签: php sql oracle encoding special-characters


【解决方案1】:

打开与Oracle DB的连接时,指定字符集参数为AL32UTF8,见oci_connect() documentation

$c = oci_connect($username, $password, $connection_string, 'AL32UTF8');

The Underground PHP and Oracle Manual 中的一些较早的全球化信息可能仍然相关。

查看您的 PHP 版本的全球化建议,以确保您的 HTML 页面正确地将字符发送到浏览器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 2021-06-21
    • 2019-03-08
    相关资源
    最近更新 更多