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が、クエリを追加してもデータベースは更新されません。$forprint4000文字より長い文字列です。

編集:

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);

さらに良いのは、 mysqliまたはPDOを介して準備済みステートメントを使用することです。

于 2012-11-14T22:12:54.060 に答える
0

varcharcolumn の typeの長さを確認し、introtext4000文字以上にしてください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 に答える