将php希伯来语var插入mysql

时间:2015-12-28 10:18:09

标签: php mysql hebrew

我有这段代码

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

现在如果我像这样写$myname

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

它运行良好否则db中的结果看起来???或者是胡言乱语。

db和table以及列都设置为'hebrew'Collat​​ion。

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

3 个答案:

答案 0 :(得分:1)

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

请考虑使用像PDO这样的数据库抽象层,或者更好地使用像Doctrine这样的全功能解决方案。

答案 1 :(得分:0)

创建表时使用 UTF-8

create table table_name () CHARACTER SET = utf8;

INSERT 到表

时,使用 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);

答案 2 :(得分:0)

数据存储

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

  • 在旧版本的MySQL(< 5.5.3)中,遗憾的是,您只能使用utf8,它只支持Unicode字符的子集。我希望我在开玩笑。

数据访问

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

  • 某些驱动程序提供了自己的配置连接字符集的机制,它们都更新了自己的内部状态,并通知MySQL要在连接上使用的编码 - 这通常是首选方法。在PHP中:

    • 如果你使用PHP≥5.3.6的PDO抽象层,你可以在DSN中指定charset

      $dbh = new PDO('mysql:charset=utf8mb4');
      
    • 如果您使用的是mysqli,则可以致电set_charset()

      $mysqli->set_charset('utf8mb4');       // object oriented style
      mysqli_set_charset($link, 'utf8mb4');  // procedural style
      
    • 如果您遇到普通mysql但碰巧运行PHP≥5.2.3,则可以致电mysql_set_charset

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

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

<强>输出

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

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

<强>输入

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

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

    • 仅适用于HTML5之前的HTML :您希望浏览器发送给您的所有数据都是UTF-8。不幸的是,如果你顺利地做到这一点,那就是将accept-charset属性添加到你的所有<form>标签:<form ... accept-charset="UTF-8">
    • 对于HTML5之前的HTML :请注意,W3C HTML规范说客户端“应该”默认将表单发送回服务器所服务的任何字符集中的服务器,但这显然只是一个推荐因此需要在每个<form>标签上明确。

其他代码注意事项

  • 显然,您所服务的所有文件(PHP,HTML,JavaScript等)都应使用有效的UTF-8进行编码。

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

  • PHP的内置字符串操作默认情况下UTF-8安全。有些事情可以安全地使用普通的PHP字符串操作(如连接),但对于大多数事情,你应该使用等效的mbstring函数。

  • 要知道你在做什么(阅读:不要搞砸了),你真的需要知道UTF-8以及它如何在尽可能低的水平上运行。查看utf8.com中的任何链接,获取一些有用的资源,了解您需要了解的所有内容。

Source

See This also