-2

データベース(mysql)にデータを挿入しようとしていますが、一重引用符または二重引用符でデータを追加しようとすると成功しません。それ以外の場合(引用符なし)は正常に機能します。このような状況で使用する必要があることはわかっていますmysql_real_escape_stringが、この機能が機能しない joomla フレームワークを使用しています。

私のコードは以下の通りです:

function insert($table, $array) {
$db = JFactory::getDBO();
 $query = "INSERT INTO ".$table;
  $fis = array();
  $vas = array();
  foreach($array as $field=>$val) {

 if(is_array($val)){
 $x= implode(",",$val);
 }
 else
 {
 $x=$val;
 }

   $fis[] = "`$field`";//you must verify keys of array outside of function;
                         //unknown keys will cause mysql errors;
                         //there is also sql injection risc;
    $vas[] = "'".$x."'";
  }
$query .= " (".implode(", ", $fis).") VALUES (".implode(", ", $vas).")";
$db->setQuery($query);
$db->query();
}
insert('#__storage_companies',JRequest::get( 'post' ));

これを取り除く方法を教えてください。

4

2 に答える 2

5

JDatabaseDriver::quoteを参照してください。のように使用され$db->quote($value)ます。また、フィールド名を引用するには、 を使用します$db->quoteName($value)

Joomla wikiのクエリの準備をご覧ください。

コードは次のようになります。

$fis[] = $db->nameQuote($field);
$vas[] = $db->quote($x);
于 2012-10-05T15:28:38.330 に答える
-1

引用符を自分でエスケープできませんか?

ただ行う:

$val = str_replace(array("'", '"'), array("\\'", '\\"'), $val);
于 2012-10-05T15:22:04.143 に答える