#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, чтобы избежать других ошибок. В любом случае, проблема была в самой строке; Не в ее размере, а в ее содержимом. В названии одной из карточек был апостроф, что, вероятно, и испортило ситуацию. Я удалил апостроф, скопировал текст и вставил его несколько раз, чтобы увеличить размер, и он по-прежнему работал отлично.
Я предполагаю, что причина, по которой этот вопрос задается так часто, заключается в том, что чем больше текста вы добавляете, тем больше вероятность того, что вы допустите ошибку.
Большое спасибо всем, кто прокомментировал ^^