PHP Mysql特殊字符问题。 记录没有插入mysql表中

My website http://www.locuciones-baratas.com/ There are many textarea where user can input text. But when user input text with special character like

1.000 millones de pesetas" |#~@¬#~€¬€~¬'''¡¡!"!! "Yo he ahorrado al PP más de 1.000 millones de pesetas", ha asegurado Correa, explicando que esa cifra se corresponde con el

then record won't insert into mysql database

I tried ut8 general ci as character set.

Set meta utf8 in html

$textarea = mb_convert_encoding($_POST['textarea'], 'ISO-8859-1','utf-8');
$insert_array = array('textarea'=>$textarea);
$sql = build_sql_insert('order',$insert_array); 
mysqli_query($conn,$sql) ;

function build_sql_insert($table, $data) {

$key = array_keys($data);
$val = array_values($data);
$sql = "INSERT INTO `$table` (" . implode(', ', $key) . ") " . "VALUES ('" . implode("', '", $val) . "')";
return($sql); 
    }

I think problem may be php dont allow special character to further proceed, data may be don't reach to mysql.

Please advice how to insert record with such text

dorkahemp972157683
dorkahemp972157683 对每个插入值应用mysqli_real_escape_string()。
接近 4 年之前 回复
doujupa7567
doujupa7567 问题不在于“php不允许特殊字符”!这个问题正是我在上面那个更大的评论中写的:在sql查询中使用它们时,你不会逃避你收到的字符。如果幸运的话,这会导致无效的查询语法,否则你的系统就会受到攻击(sql注入攻击)。请阅读我提到的主题,你会发现有关如何做到这一点的无数例子。没有办法做到这一点。您当前的代码是一个安全漏洞。
接近 4 年之前 回复
duanhao8540
duanhao8540 提供了插入代码。
接近 4 年之前 回复
duanhongqiong9460
duanhongqiong9460 添加更多清除
接近 4 年之前 回复
doudou1855
doudou1855 描述的问题是没有任何东西被插入数据库,没有错。这意味着insert语句不起作用,崩溃。这不是因为编码错误。
接近 4 年之前 回复
du0204
du0204 没有“特殊性格”这样的东西。他们应该有什么特别之处?只有人物,很多人都在玩这些人。
接近 4 年之前 回复
douxiu6835
douxiu6835 要求是插入具有这种特殊字符的记录
接近 4 年之前 回复
dongwo2222
dongwo2222 请提供插入代码。
接近 4 年之前 回复
dongzhuang5741
dongzhuang5741 是的我已经改为utf8
接近 4 年之前 回复
dongxu0690
dongxu0690 我们无法给出明确的答案,因为您选择不将代码的相关部分包含在明确需要的问题中。很可能你没有注意从客户那里得到你必须接受治疗的角色,而只是接受他们的信任。这可能不仅失败,而且往往是一个巨大的安全问题。您需要通过在数据库抽象层中使用“预准备语句”和“参数绑定”的组合来转义这些字符。
接近 4 年之前 回复
dsbifvcxr458755493
dsbifvcxr458755493 你有没有把字段的校对改为utf8?
接近 4 年之前 回复
doufuhuang6981
doufuhuang6981 可能你没有将你的变量绑定到查询中。但没有代码,我只能猜测
接近 4 年之前 回复

2个回答



也许您需要转义字符串。</ p>

尝试添加mysqli_real_escape_string。</ p>

  function build_sql_insert($ table,$ data,$ conn){

$ key = array_keys($ data);
$ val = array_values($ data);

/ n / / Mysql真正的转义字符串使用字符串值。 对于传递的单个值,此hack仅适用于
//。 请阅读下面的评论。
$ val [0] = mysqli_real_escape_string($ conn,$ val [0]);

$ sql =“INSERT INTO$ table(”。implode(',',$ 关键)。“)”。 “VALUES('”。implode(“','”,$ val)。“')”;
return($ sql);

}
</ code> </ pre>

php手册中的更多信息这里 </ p>
</ div>

展开原文

原文

maybe you need to escape strings.

Try adding mysqli_real_escape_string.

function build_sql_insert($table, $data, $conn) {

    $key = array_keys($data);
    $val = array_values($data);

    //Mysql real escape string use a string value. this hack will work only 
    //for a single value passed. please read the comment below.
    $val[0] = mysqli_real_escape_string($conn, $val[0]);

    $sql = "INSERT INTO `$table` (" . implode(', ', $key) . ") " . "VALUES ('" .     implode("', '", $val) . "')";
    return($sql); 
}

More information in php manual here

douhan9467
douhan9467 最终逃脱字符串是解决方案。 我已经测试了你的函数,mysqli_real_escape_string不会删除字符。 我粘贴的代码无法正常工作,抱歉:leaved $ city变量而不是$ val [0]。这是因为$ val是一个数组,而不是一个字符串。 你应该在mysqli_real_escape_string行中使用$ val [0]:$ val [0] = mysqli_real_escape_string($ conn,$ val [0]); 这是一个单例使用解决方案,可以使一些东西工作,你应该循环迭代通过每个$ val位置并转义每个值。
接近 4 年之前 回复
duangou1933
duangou1933 我需要保留这些角色。 不想删除它。
接近 4 年之前 回复



创建连接后($ conn = .....)尝试添加此行:</ p>

  mysqli_set_charset($ conn,“utf8”); 
</ code> </ pre>
</ div>

展开原文

原文

After the connection creation ($conn = .....) try to add this line:

mysqli_set_charset($conn, "utf8");

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐