我在将字符串插入MySQL表时遇到问题。我的代码是:
mysql_query( "INSERT INTO jos_content (
title, alias, introtext, metakey, state, created_by, metadesc)
VALUES ('$izv','$izv','$forprint','$mk',1,62,'$izv')" );
当变量$forprint
不在查询中时,一切都按预期工作,但是当我添加查询时,我的数据库不会更新。 $forprint
是一个超过4000个字符的字符串。
编辑:
将mysql_real_escape_string输入传递给db,但有些丢失了。
缺少的部分是:
<p><br></p><table style="text-align: left;" mce_style="text-align: left;"
class="mceItemTable" border="0" width="100%"><tbody><tr><td colspan="2"
rowspan="1"><h1 style="text-align: center;">HP</h1></br></br><h1 style="text-
align: center;" mce_style="text-align: center;"><br><p><br></p><p></h1></p><p><a
href="#" mce_href="#" onclick="jwplayer().load('/templates/BV/list
/HP.xml')"><p style="text-align: center;" mce_style="text-align:
center;">SDS</p></a><br mce_bogus="1"></p><br mce_bogus="1"></td></tr>
所以在我从$ forprint生成的exit.txt中,所有数据都存在,但在DB中这部分,并且表的关闭部分缺失。
EDIT2: PDO完成了这项工作,谢谢你的建议。
答案 0 :(得分:5)
$forprint
的内容是什么?它包含'
吗?如果是这样,那将导致问题。 $forprint
的内容是否来自用户?如果是这样,您有严重问题。
例如:
$con = mysql_connect("localhost","root","");
if (!$con)
die('Could not connect: ' . mysql_error());
mysql_select_db("balkan", $con);
$izv_safe = mysql_real_escape_string($izv,$con);
$mk_safe = mysql_real_escape_string($mk,$con);
$forprint_safe = mysql_real_escape_string($forprint,$con);
$query = <<<END_OF_SQL
INSERT INTO jos_content (title, alias, introtext, metakey, state, created_by, metadesc)
VALUES ('$izv_safe','$izv_safe','$forprint_safe','$mk_safe',1,62,'$izv_safe')"
END_OF_SQL;
mysql_query($query,$con);
更好的是,使用prepared statements via mysqli或PDO。
答案 1 :(得分:0)
检查列varchar
的{{1}}类型的长度,并使其成为4000+个字符introtext
答案 2 :(得分:0)
我确信只有一个引号,它正在打破插入查询。
您必须在字符串上转义引号。
类似的东西,
mysql_query("INSERT INTO jos_content
(title, alias, introtext, metakey, state, created_by, metadesc)
VALUES (
'".mysql_real_escape_string($izv)."',
'".mysql_real_escape_string($izv)."',
'".mysql_real_escape_string($forprint)."',
'".mysql_real_escape_string($mk)."',
1,
62 ,
'".mysql_real_escape_string($izv)."'
)
");
当然,你应该为所有文本输入做同样的事情。