PHP MySQL запрос UPDATE
|
|
romeo98 | Дата: Среда, 30 Июля 2014, 18:01 | Сообщение # 1 |
участник
Сейчас нет на сайте
| Пытаюсь заменить в БД значение столбца player (varchar), в той строчке, где id=1. Не работает. Подключился я к БД правильно, т.к. я могу поменять соседний столбец bestScore (int). Вот код:
Код $serverid = 1; $player = 'ADawd'; mysql_query("UPDATE `не важно` SET `player`=$player WHERE id=$serverid");
Помогите пожалуйста...
Flist - social platform PuzzleSystem - Open-source Unity Asset [2D] Mission: Defender
Сообщение отредактировал romeo98 - Среда, 30 Июля 2014, 18:02 |
|
| |
Folleah | Дата: Среда, 30 Июля 2014, 18:26 | Сообщение # 2 |
Архитектор
Сейчас нет на сайте
| Дело в столбце, в PMA поройся.
Сообщение отредактировал Folleah - Среда, 30 Июля 2014, 18:27 |
|
| |
Wikke | Дата: Среда, 30 Июля 2014, 18:36 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| вот так должно работать
Цитата mysql_query("UPDATE `не важно` SET `player`='".$player."' WHERE id=".$serverid.";");
А вообще это не безопасно, дико и неправильно. Читайте про PHP MySQLi и подготовленные выражения ( Prepared Statement ) а то у вас тут потенциальный SQL Injection.
C++ forever :3
Сообщение отредактировал Wikke - Среда, 30 Июля 2014, 18:37 |
|
| |
Folleah | Дата: Среда, 30 Июля 2014, 18:45 | Сообщение # 4 |
Архитектор
Сейчас нет на сайте
| Wikke, извиняюсь, что это за censored? И при чем тут MySqli? Вы вообще на PHP работали? Защита от инъекции: Код $serverid = mysql_escape_string('1'); $player = mysql_escape_string('ADawd'); mysql_query("UPDATE `не важно` SET `player`='$player' WHERE `id`='$serverid'");
Сообщение отредактировал Folleah - Среда, 30 Июля 2014, 18:48 |
|
| |
Wikke | Дата: Среда, 30 Июля 2014, 18:53 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| ШТА? Вы не знаете что такое mysqli? И утверждаете мне что я не работал с php. О боже мой. А ну ка быстро в гугл! Не позорьтесь!
Добавлено (30.07.2014, 18:53) --------------------------------------------- Цитата Защита от инъекции: Код $serverid = mysql_escape_string('1'); $player = mysql_escape_string('ADawd'); mysql_query("UPDATE `не важно` SET `player`='$player' WHERE `id`='$serverid'"); Это по вашему защита от иньекций? Вы серьезно? Да тут дыра размером с ... такое сравнение здесь запрещено :C player - varchar и что мне помешает передать строку
Цитата $player = "'; DROP TABLE `не важно`; --";
И получиться запрос Цитата UPDATE `не важно` SET `player`=''; DROP TABLE `не важно`; -- WHERE `id`='$serverid'
Упс и у вас нету таблицы потому что мой код, переданный вам, исполниться на стороне MySQL и кирдык вашей базе.
Подготовленные выражения делают защиту от иньекций гораздо чище и быстрее, чем какие - то классы и свистульки.
C++ forever :3
Сообщение отредактировал Wikke - Среда, 30 Июля 2014, 18:54 |
|
| |
Folleah | Дата: Среда, 30 Июля 2014, 18:57 | Сообщение # 6 |
Архитектор
Сейчас нет на сайте
| Я знаю и использовал mysqli, но в данный момент работаю с фреймворком и вкрученным ActiveRecord. Мб это и не надежная защита, но защита
|
|
| |
Wikke | Дата: Среда, 30 Июля 2014, 19:00 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| Просто mysql интерфейс устарел. Это факт. Его не рекомендуется использовать. А подготовленные выражения дают множество преимуществ ( и об этом писали на хабре, и я сам это ощутил ).
Как минимум однотипные запросы выполняются гораздо быстрее ( и это относится не только к MySQL )
C++ forever :3
|
|
| |
Folleah | Дата: Среда, 30 Июля 2014, 19:02 | Сообщение # 8 |
Архитектор
Сейчас нет на сайте
| Я не знаю всех тонкостей работы с БД. Ибо перешел на клиент
|
|
| |
last2424 | Дата: Среда, 30 Июля 2014, 20:46 | Сообщение # 9 |
30 мл. блоков
Сейчас нет на сайте
| Код mysql_query("UPDATE 'не важно' SET 'player'='".$player."' WHERE 'id'=".$serverid.";") Может так?
Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
|
|
| |
Wikke | Дата: Среда, 30 Июля 2014, 20:57 | Сообщение # 10 |
частый гость
Сейчас нет на сайте
| Цитата mysql_query("UPDATE 'не важно' SET 'player'='".$player."' WHERE 'id'=".$serverid.";")
Может так? biggrin oh ... у вас проблемы с SQL.
C++ forever :3
|
|
| |
last2424 | Дата: Среда, 30 Июля 2014, 21:00 | Сообщение # 11 |
30 мл. блоков
Сейчас нет на сайте
| Wikke, в смысле проблемы, от 'переменная' ничего не случится. Это проверено.
Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
Сообщение отредактировал last2424 - Среда, 30 Июля 2014, 21:01 |
|
| |
Wikke | Дата: Среда, 30 Июля 2014, 21:07 | Сообщение # 12 |
частый гость
Сейчас нет на сайте
| Цитата Wikke, в смысле проблемы, от 'переменная' ничего не случится. biggrin Это проверено. Я только что прогнал ваш запрос и получил ошибку MySQL 5.6
C++ forever :3
|
|
| |
last2424 | Дата: Среда, 30 Июля 2014, 21:09 | Сообщение # 13 |
30 мл. блоков
Сейчас нет на сайте
| Wikke, а ты базу указал? Переменные указал? У меня Mysql 5.5.
Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
Сообщение отредактировал last2424 - Среда, 30 Июля 2014, 21:10 |
|
| |
Wikke | Дата: Среда, 30 Июля 2014, 21:16 | Сообщение # 14 |
частый гость
Сейчас нет на сайте
| Вот :
Код UPDATE 'users' SET 'user_nickname'='test' WHERE 'user_id'=1;
И это ошибочный sql, но сделанный по твоему шаблону
Цитата "UPDATE 'не важно' SET 'player'='".$player."' WHERE 'id'=".$serverid.";"
C++ forever :3
|
|
| |
last2424 | Дата: Среда, 30 Июля 2014, 21:26 | Сообщение # 15 |
30 мл. блоков
Сейчас нет на сайте
| Цитата "UPDATE не важно SET player=".$player." WHERE id=".$serverid.";" Тогда так. P.S. а разве точка с запятой там должна стоять?
Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
Сообщение отредактировал last2424 - Среда, 30 Июля 2014, 21:27 |
|
| |