我遇到了一个奇怪的问题,我以前从未遇到过准备好的陈述。我正在使用内置的PHP MySQLi函数将数据插入数据库。
代码如下所示:
$mysqli = new mysqli("localhost", "user", "pass", "test");
$mysqli->set_charset('utf8');
$stmt = $mysqli->prepare("INSERT INTO `lines` (`description`) VALUES (?)");
$stmt->bind_param("s", $_POST['description']);
$stmt->execute();
在名为'description'的textarea中,输入以下字符串:
爱丽丝喜欢鲍勃的猫。
请注意,撇号不是常规'类型,而是我从电子邮件中复制该行所得到的(在OS X的邮件应用程序中)。
当textarea作为表单的一部分提交时,存储在表中字段中的值为:
爱丽丝喜欢鲍勃
其余的被切断了。我已尽可能多地调试,我知道以下情况属实:
我原本以为这是一个编码问题,但是第(3)点似乎与此相矛盾,所以我唯一留下的就是我设置语句的方式有问题。
如果有人能说出一些亮点,那将是最有帮助的。
答案 0 :(得分:0)
事实证明它与我最初怀疑的编码相关。 this question中的最佳答案解决了这个问题,但是我仍然无法解释为什么不仅仅错误地显示字符(或者错误地存储它),字符串在那时被切断了。如果有人对为什么会发生这种情况有实际答案,那么如果仅出于学术原因,我们将非常感激!
答案 1 :(得分:-3)
在插入
之前,您需要转义字符串<?php
$str = "Is your name O'reilly?";
// Outputs: Is your name O\'reilly?
echo addslashes($str);
?>
从PHP文档中获取的示例。
您可能还需要考虑安全性 - 将后期数据插入SQL而不进行验证绝不是一个好主意。