Экранировал, решать задачу нет времени, я тут Вам свою задачу решить предлагаю вообще то!
|
Какую задачу? О возможных причинах я сказал. Записать в базу можно что угодно. Если данные подготовлены, то обрезать их может только лимит установленный на длину поля VARCHAR.
|
Экранировал 2 способами: $str= str_replace("'","\'",$str);
$str= mysqli_real_escape_string($str); Не помогло. Я думаю Ваша задача про заявки решаема. Времени нет полностью решать ее. Я тут известную Вам задачу решить не могу. |
Цитата:
Экранируется вот так $str= mysqli_real_escape_string($str); А еще правильнее, в рамках mysqli и PDO использовать подготовленные запросы. Но, если речь о наборе чисел, то: $a = [1, 2, 3]; echo json_encode($a); //[1, 2, 3] экранирование не требуется $a = [1, "2", 3]; echo json_encode($a); //[1, "2", 3] нужно экранировать или echo json_encode($a, JSON_NUMERIC_CHECK); //[1, 2, 3] экранирование не требуется //но если данные извне и ожидаем только числа, то: $a = array_map('intval', $a); $json = json_encode($a); //и с записью этой строки проблем не будет "UPDATE table SET field='$json'" Понял о какой задаче. Решать можно многое, но в данном случае большой кровью. |
Все заработало, возможно было дело в том что Вы написали, а так основная ошибка была в логике скрипта. Но в любом случае большое спасибо. Еще остался вопрос, как удалять и изменять(а также другие операции проводить) данные в строке-массиве, который в одном поле базы. Вот пример который у меня работает, но не всегда:
mysqli_query($myConnect, " UPDATE `red` SET `red` = CONCAT(`red`, ',' , '{$Log}') "); Напишите пожалуйста подобные строки в таком же синтаксисе, я имею в виду не в ООП и в других вариантах. |
Цитата:
Вот здесь также думают что строка в одном поле, это удобно и круто, а потом маются. |
Я все понимаю, быстродействие мне нужно, но удобство порой важней, мне нужно только удалять значение из строки-поля, удалять я могу, только запятые остаются, с этим может и справлюсь, просто хотел бы посмотреть на Ваше решение, мож оно будет лучше. Мне нужны варианты, чтобы был выбор, а ставить то или иное решение в виде панацеи я не стал бы и Вам не советую. Я читал о мнении что удобство порой важней даже производительности и согласен с этим. Массив я хочу запихивать так: $str= implode(',', $arr);
а не через json_encode. Будет ли это правильным? |
Я и не говорю о быстродействии, я говорю о невозможности выполнения задачи.
Оставьте в покое sql и возьмите к примеру строку "a, b, c, d, f". Считаем, что у вашего РНР нет функции explode(), а также регулярных выражений. Требуется заменить f на e. Если мы знаем, что позиция f последняя, то это легко сделать. Также не будет затруднений если она будет первой, и даже в середине, и мы знаем эту позицию. Но если мы не знаем позиции, если символов в строке может быть сколь угодно, то задача кардинально усложняется - нужно получить подстроку до первой запятой, затем из остатка следующую подстроку до запятой и т.д. пока не обнаружим символ. Теперь мысленно перенесите этот процесс замены в sql. Надо ли еще говорить, что это и есть причина по которой так данные в базе не хранят? Если массив числа, то конечно не проблема просто объединять их разделителем. |
Мне замена не нужна, мне добавление и удаление нужны пока, понимаю что на будущее и можно оставить задел, но в будущем можно переписать и базу и код под новые условия, хотя это и может быть сложно до невозможности. Пока буду исходить из того что есть. Мне только нужно удалить к примеру 44 из 15,44,10. И знать могу ли я json_encode заменить на implode.
|
А добавление и удаление разве не модификация? Если добавить в конец строки не проблема, то удалить в произвольном месте, это еще надо найти, а с какими трудностями это связано я уже устал говорить. Средствами sql бескровно этого не сделать, нет в mysql реализации замены по регулярному выражению.
Вы изначально неверно представили хранение данных в неудобном для задачи формате, отсюда и проблемы ваши. Ну это же очевидно - к примеру пишите вы сайт для организации. На страницах будет выводиться информация о ней, включая и ее телефоны. Это практически постоянные данные, а если изменились, или вместо запятой их нужно вывести через пробел, так для этого есть административный раздел сайта, в нем строку с телефонами в поле ввода откорректировали и сохранили. Но хранить телефоны клиентов этой организации в строке через разделитель, до этого вряд ли бы вы додумались, так как каике-то нужно будет и удалять, по номерам нужно будет и выборку делать, а при добавлении новых нужно проверять есть ли такой номер в базе, и т.д., и т.п. К тому же, если хорошо думать, то и храниться номер будет ни как 8(999)... и с прочими вариациями, а только числа. У вас может и меньший объем, строка короче, но как раз потому что вы данные вогнали в строку, вы и огребли проблем по полной. И это может быть еще только началом. |
Часовой пояс GMT +3, время: 05:49. |