Привет, у меня есть строка с именем $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 и т. д.
Именно поэтому я хочу удалить *
откуда взялась звездочка? Вы не контролируете это? Если да, то зачем это включать?
Просто удали, вот и все.
Я не могу удалить его, прочтите вопрос полностью. Я использую переменную $sql в других методах, использующих SELECT и т. д.
Такого рода манипуляции с операторами SQL - это запах кода, которые почти наверняка приведут к проблемам. Вероятно, вы захотите создать новый запрос на основе данных, используемых для построения SELECT.
Это не запах кода, вы не имеете представления об остальной части моего кода, я просто задаю простой вопрос.
этот дополнительный бит (вы добавили при редактировании) должен был быть частью исходного сообщения; откуда мне / нам было знать, что вы не можете этим манипулировать?
Это не лишний бит - он очень длинный. Все, что я хочу, это маленькая вещь. Доплата не важна. Я просто хочу удалить первый символ этой строки, вот и все.






Чтобы удалить любой ведущий символ, вы можете использовать функцию 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 все еще есть *
Если это так, то ваша переменная $ sql не содержит строку, которую вы указали выше. Взгляните на эту скрипку: codepad.org/zdMkSimM
Странно, когда я var_dump, переменная $star с substr выводит *. Есть ли способ манипулировать им с помощью substr?
$sql - это определенно строка, поэтому я не понимаю, почему она не работает
Поскольку ваш substr говорит: substr ($ sql, 1, 2); он начинается со второго символа. Он отсчитывается от нуля, поэтому substr ($ sql, 0,1); вернет первый символ. Поскольку 1, 2 возвращает *, фактически возвращается «*». Это означает, что у вас есть ведущий пробел. Затем вы можете использовать ltrim ($ sql, "*");
@Horcrux следует отметить, что ltrim является жадным и удаляет указанные символы, которые предшествуют предоставленной строке, до тех пор, пока не останется ни одного. например ltrim(' * * * *String', ' *') приводит к String Я предлагаю вместо этого использовать preg_replace('/^\s?\*/', '', $string), чтобы желаемый шаблон был удален явно, а не неявно.
Если вы хотите удалить только звездочку '*' вы можете заменить в своем коде эту строку:
$star = substr($sql, 1, 2);
с участием:
$star = str_replace('*',"",$sql);
//this will remove all asterisk
Если вам нужно заменить только первое вхождение '*', используйте:
$star = preg_replace('/\*/', '', $sql, 1);
DELETE *не является допустимым (моим) оператором sql.