Да, очень важно экранировать все значения, прежде чем использовать их в команде SQL.
$json = $_POST['msg_top'];
$msg = json_decode($json);
foreach($msg->entry as $status) {
$t = mysql_real_escape_string($status->content);
$query = "INSERT INTO msg2(id,msg,msg_id,depth) VALUES ('','$t','ID','3')";
mysql_query($query);
if( !mysql_query($query, $dbh) ) {
die('error:' .mysql_error());
}
}
Также возможны другие проблемы с вашим запросом:
- Если поле id имеет значение auto_increment'ing, оно не требуется в поле или списке значений.
- Возможно, я что-то упускаю, но почему вы используете строку 'ID' для поля msg_id?
Что касается помощи в устранении неполадок, я рекомендую просто добавить все строки $ query в файл журнала для последующей проверки. Затем, если проблемы не очевидны, вы можете просто попытаться вручную запустить команду в базе данных (то есть: возможно, через PhpMyAdmin) и проверить любые коды ошибок оттуда.