Как вывести строку в переменной, удалив первый символ, найденный с помощью функции substr

Привет, у меня есть строка с именем $sql:

* FROM users WHERE users.id = '390' (просто и пример, может быть что угодно)

В моей функции у меня есть переменная $sql, которая является строкой выше. Я хочу избавиться от * до FROM. Моя переменная $star выводит *, но как мне закодировать переменную $sql, чтобы исключить символ * перед ней?

$sql = $this->pdoquery($a, $v);
$star = substr($sql, 1, 2);
$query = "DELETE " . $sql;

Я не могу изменить переменную $sql, чтобы опустить ее в функции pdoquery, потому что я использую ее для SELECT и т. д.

DELETE * не является допустимым (моим) оператором sql.
Funk Forty Niner 25.07.2018 15:37

Именно поэтому я хочу удалить *

I Love Code 25.07.2018 15:37

откуда взялась звездочка? Вы не контролируете это? Если да, то зачем это включать?

Funk Forty Niner 25.07.2018 15:38

Просто удали, вот и все.

Funk Forty Niner 25.07.2018 15:38

Я не могу удалить его, прочтите вопрос полностью. Я использую переменную $sql в других методах, использующих SELECT и т. д.

I Love Code 25.07.2018 15:40

Такого рода манипуляции с операторами SQL - это запах кода, которые почти наверняка приведут к проблемам. Вероятно, вы захотите создать новый запрос на основе данных, используемых для построения SELECT.

Alex Howansky 25.07.2018 15:41

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

I Love Code 25.07.2018 15:44

этот дополнительный бит (вы добавили при редактировании) должен был быть частью исходного сообщения; откуда мне / нам было знать, что вы не можете этим манипулировать?

Funk Forty Niner 25.07.2018 15:48

Это не лишний бит - он очень длинный. Все, что я хочу, это маленькая вещь. Доплата не важна. Я просто хочу удалить первый символ этой строки, вот и все.

I Love Code 25.07.2018 15:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
9
36
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Чтобы удалить любой ведущий символ, вы можете использовать функцию php ltrim.

$sql = ltrim($sql, "*");

var_dump($sql); // Output: string(34) " FROM users WHERE users.id = '390'"

Отредактируйте в соответствии с вашим обновлением:

Поскольку вы не можете изменить исходную переменную, вы можете просто сделать это следующим образом:

$without_star = ltrim($sql, "*");

var_dump($sql); // Output: string(35) "* FROM users WHERE users.id = '390'"
var_dump($without_star); // Output: string(34) " FROM users WHERE users.id = '390'"

Не работает, на выходе $without_star все еще есть *

I Love Code 25.07.2018 15:48

Если это так, то ваша переменная $ sql не содержит строку, которую вы указали выше. Взгляните на эту скрипку: codepad.org/zdMkSimM

Ole Haugset 25.07.2018 15:50

Странно, когда я var_dump, переменная $star с substr выводит *. Есть ли способ манипулировать им с помощью substr?

I Love Code 25.07.2018 15:52
$sql - это определенно строка, поэтому я не понимаю, почему она не работает
I Love Code 25.07.2018 15:54

Поскольку ваш substr говорит: substr ($ sql, 1, 2); он начинается со второго символа. Он отсчитывается от нуля, поэтому substr ($ sql, 0,1); вернет первый символ. Поскольку 1, 2 возвращает *, фактически возвращается «*». Это означает, что у вас есть ведущий пробел. Затем вы можете использовать ltrim ($ sql, "*");

Ole Haugset 25.07.2018 15:55

@Horcrux следует отметить, что ltrim является жадным и удаляет указанные символы, которые предшествуют предоставленной строке, до тех пор, пока не останется ни одного. например ltrim(' * * * *String', ' *') приводит к String Я предлагаю вместо этого использовать preg_replace('/^\s?\*/', '', $string), чтобы желаемый шаблон был удален явно, а не неявно.

Will B. 25.07.2018 18:36

Если вы хотите удалить только звездочку '*' вы можете заменить в своем коде эту строку:

$star = substr($sql, 1, 2);

с участием:

$star = str_replace('*',"",$sql);
//this will remove all asterisk

Если вам нужно заменить только первое вхождение '*', используйте:

$star = preg_replace('/\*/', '', $sql, 1);

Другие вопросы по теме