PHP MySQL插入语句不会插入数据

时间:2012-11-14 22:10:18

标签: php mysql

我在将字符串插入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完成了这项工作,谢谢你的建议。

3 个答案:

答案 0 :(得分:5)

$forprint的内容是什么?它包含'吗?如果是这样,那将导致问题。 $forprint的内容是否来自用户?如果是这样,您有严重问题。

通过允许SQL injection attacks

,您无法逃避可能极其危险的变量

尝试使用mysql_real_escape_string

例如:

$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 mysqliPDO

答案 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)."'
            )
");

当然,你应该为所有文本输入做同样的事情。