(PHP / MYSQL) Вставка в не будет работать при вставке больших значений, без тайм-аута или ошибок

#php #mysql #actionscript-3 #flash #insert-into

#php #mysql #actionscript-3 #flash #вставить-в

Вопрос:

Я работаю над программой AS3 с использованием flash; в программе вы вводите свое имя пользователя и пароль и выбираете колоду карт для регистрации; При нажатии кнопки регистрации flash отправляет имя пользователя, пароль и длинную строку из колоды карт, которая может достигать более 1 МБ (но на данный момент это всего 1 КБ).

Для этого я использую INSERT INTO метод. Это мой код:

 <?php 

/*
connect to database
*/

include "connect.php";

/*
create POST vars to receive data from flash
*/

$username = $_POST['username'];
$password = $_POST['password'];

$sdTrunkest = $_POST['sdTrunk'];


$sql = "INSERT INTO users (username, password, Trunk) VALUES ('$username', '$password', '$sdTrunkest')";
mysql_query($sql); 
exit("result_message=Success");
?>
  

Когда я запускаю этот код, в то время как $ sdTrunkest имеет длину около 100 байт, он работает нормально и регистрируется. Но когда я пытаюсь запустить его, когда $ sdTrunkest составляет около 1 КБ, он просто «притворяется, что никогда не видел» INSERT INTO строку. Это не выдает мне ошибку тайм-аута, и даже в этом случае я пытался использовать ini_set('max_execution_time', 0); , но это не изменилось. На самом деле, это вообще не дает мне никаких ошибок. INSERT INTO Не удается обработать длинный текст? И есть ли способ это исправить?

Заранее благодарю вас ^^

Комментарии:

1. Есть ли странные символы во входных данных? Вы должны очистить их php.net/manual/en/function.mysql-real-escape-string.php . Я бы также предложил посмотреть журнал php / apache

2. нет ошибок, потому что вы не используете ошибки mysql.

3. Добавьте отчет об ошибках в начало вашего файла (ов) error_reporting(E_ALL); ini_set('display_errors', 1); посмотрите, дает ли это что-нибудь.

4. попробуйте это mysql_query($sql) or die (mysql_error());

5. @Justin, это дало мне это, хотя я не думаю, что это вообще связано.. Устарело: mysql_connect(): расширение mysql устарело и будет удалено в будущем: вместо этого используйте mysqli или PDO

Ответ №1:

Да, это обычно называется очисткой входных данных, и это был мой первый комментарий. Есть несколько способов очистки, но самый простой для понимания — использовать mysql_real_escape_string (http://www.php.net/manual/en/function.mysql-real-escape-string.php)

Комментарии:

1. Благородно, но не ответ на проблему операционной системы, которая уже решена. Это больше подходит в качестве комментария. Для этого у вас достаточно очков репутации.

2. Изменение данных таким образом, чтобы они не нарушали работу программы, на самом деле не является решением, особенно в веб-коде, где любой может отправить вам что угодно

3. Конечно, я соглашусь с этим пунктом. Однако, и я говорю это по опыту, даже при использовании real_escape_string() в отношении апострофов, не всегда работает. Вот почему я должен использовать другие функции в связи с этим; как ни странно.

4. Да, в идеале это было бы переключено на подготовленные инструкции ( php.net/manual/en/mysqli.quickstart.prepared-statements.php ) или что-то в этом роде, но mysql_real_escape_string() показался хорошим введением в проверку работоспособности / границ для операции

5. @Justin Странно, ни mysql_real_escape_string ни addslashes , похоже, не работают, они оба вызывают у меня ту же проблему, что и в первый раз, вызванный апострофом. Есть идеи?

Ответ №2:

Я нашел проблему. Это имело мало общего с ошибкой mysql_connect, но я мог бы также изменить на mysqli, чтобы избежать других ошибок. В любом случае, проблема была в самой строке; Не в ее размере, а в ее содержимом. В названии одной из карточек был апостроф, что, вероятно, и испортило ситуацию. Я удалил апостроф, скопировал текст и вставил его несколько раз, чтобы увеличить размер, и он по-прежнему работал отлично.

Я предполагаю, что причина, по которой этот вопрос задается так часто, заключается в том, что чем больше текста вы добавляете, тем больше вероятность того, что вы допустите ошибку.

Большое спасибо всем, кто прокомментировал ^^