0

私は次の機能を持っています:

function insert($database, $table, $data_array)
{
# Connect to MySQL server and select database
$mysql_connect = connect_to_database();
mysql_select_db ($database, $mysql_connect);

# Create column and data values for SQL command
foreach ($data_array as $key => $value) 
    {
    $tmp_col[] = $key;
    $tmp_dat[] = "'$value'";
    }
 $columns = join(",", $tmp_col);
 $data = join(",", $tmp_dat);

# Create and execute SQL command
$sql = "INSERT INTO ".$table."(".$columns.")VALUES(". $data.");";
$result = mysql_query($sql, $mysql_connect);

# Report SQL error, if one occured, otherwise return result
if(mysql_error($mysql_connect))
    {
    echo "MySQL Update Error: ".mysql_error($mysql_connect);
    $result = "";
    }
else
    {
    return $result;
    }
}

php の値は次のとおりです。

$content_table = "p_content";
$insert_array['title'] = $title;
    $insert_array['content'] = $content;
$insert_array['url'] = $get_source;
$insert_array['video'] = $video;
$insert_array['date'] = $date;
insert(DATABASE, $content_table, $insert_array);

このすべての結果として、id (キー、自動インクリメント)、url、および日付を含む行が追加されます。タイトル、コンテンツ、ビデオは空白です。タイトルをエコーすると、正しい結果が得られます。タイトルを var_dump すると、string(15)"blablablabla" が得られます。これも正しいです。

$title = "asdf"; を手動で設定すると、正しく挿入されています。コンテンツとビデオについても同様です。

テーブル構造

id int(8) unsigned NO PRI NULL auto_increment

title varchar(1000) はい NULL

content longtext YES NULL

video varchar(3000) はい NULL

url varchar(300) はい NULL

日付 日付 はい NULL

4

2 に答える 2

0

試す:

function insert($database, $table, $data_array)
{
    # Connect to MySQL server and select database
    $mysql_connect = connect_to_database();
    mysql_select_db($database, $mysql_connect);

    $cols = array();
    $vals = array();
    foreach ($data_array as $key => $value) {
        $cols[] = "`" . $key . "`";
        if (is_int($value) || is_float($value)) {
            $vals[] = $value;
        } else {
            $vals[] = "'" . mysql_real_escape_string($value) . "'";
        }
    }

    $sql = "INSERT INTO " . $table
         . ' (' . implode(', ', $cols) . ') '
         . 'VALUES (' . implode(', ', $vals) . ')';

    $result = mysql_query($sql, $mysql_connect);

    # Report SQL error, if one occured, otherwise return result
    if(mysql_error($mysql_connect)) {
        echo "MySQL Update Error: " . mysql_error($mysql_connect);
        $result = ""; // FIXME should probably return false here
    } else {
        return $result;
    }
}

重要

あなたのコードと上記は、SQL インジェクションに対して脆弱である可能性があります。それらについて読んでください。

于 2013-02-17T00:18:03.517 に答える
0

変数に引用符を追加してみてください。:-) その理由は、MYSQL 列の型が VARCHAR として設定されているためです。また、データを挿入するには、挿入を引用符で囲む必要があります。

ところで、これが新しいコードである場合は、MYSQLI または PDO ライブラリに切り替えることをお勧めします。

于 2013-02-17T00:20:34.503 に答える