0

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

4

3 回答 3

5

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

你没有逃避你的变量,这可能会因为允许SQL 注入攻击而变得极其危险

尝试使用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);

更好的是,通过 mysqliPDO使用准备好的语句。

于 2012-11-14T22:12:54.060 回答
0

检查varcharcolumn 类型的长度introtext,并将其设为 4000+ 字符say varchar(6000)

于 2012-11-14T22:12:57.370 回答
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)."'
            )
");

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

于 2012-11-14T22:13:34.730 回答