我有这段代码
$myname="דוגמא";
$sql="insert into tbl_users values (" . $myname . ")";
$command = $con->prepare($sql);
$command->execute()
现在如果我像这样写$myname
$myname="\'דוגמא\'";
它运行良好否则db中的结果看起来???或者是胡言乱语。
db和table以及列都设置为'hebrew'Collation。
现在我的问题是我怎样才能以正常的方式做到这一点而不是用斜线?
答案 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-8set 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等),这些要点可能仍然有用:
accept-charset
属性添加到你的所有<form>
标签:<form ... accept-charset="UTF-8">
。<form>
标签上明确。其他代码注意事项: