2013-02-16 3 views
0

У меня есть следующие функции:phpmysql вставляет пустые вместо значения

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

В результате все это добавляет строку с идентификатором (ключ, autoimcrement), url и date. Заголовок, контент и видеоролики пусты. Если я эхо заголовок, я получаю правильный результат, если я var_dump заголовок, я получаю строку (15) «blablablabla», снова правильно.

Теперь, если я установил $ title = "asdf"; он встает правильно. То же самое касается контента и видео.

структура таблицы

ID INT (8) без знака НЕТ ПОИ NULL auto_increment

Название VARCHAR (1000) Да NULL

содержание LONGTEXT Да NULL

видео VARCHAR (3000) Да NULL

url varchar (300) ДА NULL

Дата

дата YES NULL

+0

Каков результат '$ insert_array'? Попробуйте использовать 'var_dump' или' print_r', чтобы увидеть формат и обеспечить правильный формат SQL. – djthoms

+0

Array ([title] => "asjgalkjhgfdkjas". [Content] => lqejrhgojiehrgakehlgkj [url] => http: //xxxxxxxxxxxxxxxxx.html [video] => [date] => 2013-02-17 00:45:46) Вот как выглядит print_r, и я попытался поместить запрос вставки напрямую без функции, но тот же результат – Alexk

+0

это часть библиотеки, в любом случае вставка отлично работает, если я передам значения каждой переменной – Alexk

ответ

0

Попробуйте добавить цитаты в переменные. :-) Причина в том, что типы столбцов MYSQL заданы как VARCHAR. Вставка данных требует, чтобы вы вставляли свои вставки в кавычки.

B.T.W. если это новый код, я бы рекомендовал переключиться на библиотеку MYSQLI или PDO.

0

Try:

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 Инъекции. Пойдите, прочитайте о них.

Смежные вопросы