将 php 希伯来语变量插入 mysql

Insert php hebrew var into mysql

我有这个代码

$myname="דוגמא";
$sql="insert into tbl_users values (" . $myname . ")";
$command = $con->prepare($sql);  
$command->execute()

现在如果我这样写$myname

$myname="\'דוגמא\'";

它运行良好,否则数据库中的结果看起来像 ???或胡言乱语。

数据库和 table 和列都设置为 'hebrew' 排序规则。

现在我的问题是我怎样才能以正常方式做到这一点,而不是像这样使用斜杠?

您正在尝试插入字符串。 SQL 中的字符串需要用引号括起来:INSERT INTO tbl_name (field_name) VALUES ("string surrounded by quotation marks");.

请考虑使用适当的数据库抽象层,如 PDO,或者更好的全功能解决方案,如 Doctrine。

CREATE table.

时使用 UTF-8
create table table_name () CHARACTER SET = utf8;

当您 INSERT 到 table

时使用 UTF-8
set username utf8; INSERT INTO table_name (ABC,VAL);

您可以详细阅读here

同时检查您的连接,它应该在 utf-8.

例如:

$link = mysql_connect('localhost', 'username', 'password');
mysql_set_charset('utf8',$link);

数据存储:

  • 为数据库中的所有表和文本列指定 utf8mb4 字符集。这使得 MySQL 在物理上存储和检索以 UTF-8 编码的本地值。请注意,如果指定了 utf8mb4_* 排序规则(没有任何显式字符集),MySQL 将隐式使用 utf8mb4 编码。

  • 在 MySQL (< 5.5.3) 的旧版本中,不幸的是,您将被迫使用仅支持 Unicode 字符子集的 utf8。我希望我是在开玩笑。

数据访问:

  • 在您的应用程序代码中(例如 PHP),无论您使用何种数据库访问方法,您都需要将连接字符集设置为 utf8mb4。这样,MySQL 在将数据传递给您的应用程序时不会从其本机 UTF-8 进行转换,反之亦然。

  • 一些 driver 提供了它们自己的连接字符集配置机制,它既更新了自己的内部状态,又通知 MySQL 要使用的编码连接——这通常是首选方法。在 PHP:

    • 如果您使用 PDO abstraction layer with PHP ≥ 5.3.6, you can specify charset in the DSN:

      $dbh = new PDO('mysql:charset=utf8mb4');
      
    • 如果您正在使用 mysqli, you can call set_charset():

      $mysqli->set_charset('utf8mb4');       // object oriented style
      mysqli_set_charset($link, 'utf8mb4');  // procedural style
      
    • 如果你受困于普通 mysql but happen to be running PHP ≥ 5.2.3, you can call mysql_set_charset

  • 如果 driver 没有提供自己的设置连接字符集的机制,您可能必须发出查询来告诉 MySQL 您的应用程序如何期望数据在要编码的连接:SET NAMES 'utf8mb4'.

  • 关于 utf8mb4/utf8 的相同考虑适用于上述。

输出:

  • 如果您的应用程序将文本传输到其他系统,则还需要告知它们字符编码。对于 Web 应用程序,必须通知浏览器发送数据的编码(通过 HTTP 响应 headers 或 HTML metadata)。

  • 在PHP中可以使用default_charsetphp.ini选项,或者自己手动发出Content-TypeMIMEheader,这只是更多的工作,但具有相同的效果。

输入:

  • 不幸的是,在尝试存储或在任何地方使用它之前,您应该验证每个收到的字符串是否为有效的 UTF-8。 PHP 的 mb_check_encoding() 可以解决问题,但您必须虔诚地使用它。确实没有办法解决这个问题,因为恶意客户端可以使用他们想要的任何编码提交数据,而且我还没有找到让 PHP 可靠地为您执行此操作的技巧。

  • 根据我对当前 HTML spec 的阅读,以下 sub-bullets 对于现代 HTML 来说不再是必需的,甚至不再有效。我的理解是浏览器将使用为文档指定的字符集并提交数据。但是,如果您的目标是旧版本的 HTML(XHTML、HTML4 等),这些要点可能仍然有用:

    • 仅在 HTML5 之前的 HTML:您希望浏览器发送给您的所有数据都采用 UTF-8 格式。不幸的是,如果你通过唯一可靠的方法来做到这一点,那就是将 accept-charset 属性添加到你所有的 <form> 标签中:<form ... accept-charset="UTF-8">.
    • 仅在 HTML5 之前的 HTML:请注意 W3C HTML 规范表示客户端 "should" 默认为以服务器提供的任何字符集将表单发送回服务器,但这显然只是一个建议,因此需要在每个 <form> 标记上明确显示。

其他代码注意事项:

  • 很明显,您要提供的所有文件(PHP、HTML、JavaScript 等)都应该使用有效的 UTF-8 编码.

  • 您需要确保每次处理 UTF-8 字符串时都是安全的。不幸的是,这是困难的部分。您可能希望广泛使用 PHP 的 mbstring 扩展。

  • PHP的built-in字符串操作在默认情况下不是UTF-8安全的。 有些事情你可以用正常的 PHP 字符串操作安全地做(比如连接),但对于大多数事情你应该使用等效的 mbstring 函数。

  • 要知道您在做什么(阅读:不要搞砸了),您确实需要了解 UTF-8 以及它如何在尽可能低的级别上工作。查看 utf8.com 中的任何链接,获取一些很好的资源,以了解您需要了解的一切。

Source

See This also