2015-07-26 5 views
-3

Когда я запускаю приведенный ниже код для вставки новой строки в базу данных phpMyAdmin, программа умеет вставлять часть mysql_query(). Он показывает «Невозможно вставить». Что случилось с моим кодом? Кто-нибудь может мне помочь?PHP - mysql_query не может вставить новую строку

$connection = mysql_connect($hostname, $username, $password) 
or die("Cannot connect db"); 

mysql_select_db("eLink", $connection) 
    or die("Cannot select db"); 

$send_id = $_REQUEST['send_id']; 
$to_id = $_REQUEST['to_id']; 
$msg = $_REQUEST['msg']; 
$type = $_REQUEST['type']; 

$time = time() + (60*60*6); 
$send_time = date('Y-m-d h:i:s', $time); 

mysql_query("INSERT INTO msg_record (send_id, to_id, msg, type, send_time) 
       VALUES (".$send_id.",".$to_id.",".$msg.",".$send_time.")") 
      or die("Cannot insert");  

die(json_encode(array('send_id'=>$send_id, 'to_id'=>$to_id, 'msg'=>$msg, 'type'=>$type, 'send_time'=>$send_time))); 
?> 
+0

где is type value in insert query –

+1

Распечатайте сообщение об ошибке, а не бесполезную строку «не может вставить». И это 2015, время, чтобы отбросить 'mysql_ *' и использовать параметры привязки уже. SQL-инъекция в прошлом веке ... – Mat

+1

Скорее всего, оператор insert недействителен, потому что любое из введенных значений недопустимо или должно быть экранировано. Пожалуйста, найдите время, чтобы прочитать документацию, чтобы узнать, как [узнать больше о конкретных ошибках] (http://php.net/manual/en/function.mysql-error.php). Когда вы это сделаете, обратите внимание на большой красный квадрат на каждой странице документации API-интерфейса mysql_ * ', в которой указано, что эти функции устарели. Переход на другой API, такой как PDO, также дает вам возможность использовать параметры привязки, которые будут неявно устранять вашу текущую проблему * и * вашу уязвимость в SQL-инъекции. Тройная победа! – GolezTrol

ответ

1

Таким образом, во-первых, вы пытаетесь вставлять 5 значений send_id, to_id, msg, type, send_time, но послал всего 4 $send_id, $to_id, $msg, $send_time.

А также все строковые переменные должны быть заключены между котировками ' или ".

И найти ошибки действительно быстро использовать что-то вроде этого

mysql_query("INSERT INTO msg_record (send_id, to_id, msg, type, send_time) 
       VALUES ($send_id, $to_id, '$msg', '$type', '$send_time')") 
or die(mysql_error($connection)); 

Но использовать это только в режиме разработки!

+0

О, это моя глупая ошибка. Спасибо за ваше объяснение. – JacksonNg

0

Try заключая одиночные кавычки (') в значения

mysql_query("INSERT INTO msg_record (send_id, to_id, msg, type, send_time) 
      VALUES ('$send_id','$to_id','$msg','$send_time')") 
or die("Cannot insert"); 

предложить также использовать mysqli или PDO для целей безопасности

0

Как я вижу это вам не хватает в кавычки строк вы «Вставка в вашу базу данных, и вам не хватает типа вставки .:

mysql_query("INSERT INTO msg_record (send_id, to_id, msg, type, send_time) 
       VALUES ($send_id, $to_id, '$msg', '$type', '$send_time')") 
      or die("Cannot insert"); 

Но нормальный mysql небезопасен, поэтому вам следует подумать об использовании mysqli или pdo.

+0

Я попробовал ваше предложение. Работает. Спасибо! @Djip – JacksonNg

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