Рейтинг:-1

Как выбрать данные из mysql с помощью скрипта bash и передать их в php?

флаг in

Это то, что я пытаюсь сейчас

В PHP я запускаю следующий скрипт:

exec('/home/user1/createinstanceinfolder.sh', $output, $return_var);

print_r ($ вывод);

Который вызывает следующий скрипт Bash:

объявить -A arr == $(sudo mysql -u root -h localhost -e "ИСПОЛЬЗОВАТЬ mydb; ВЫБРАТЬ * ОТ пользователей")

для i в "${arr[@]}"
делать
эхо "$i"
сделано

Php печатает пустой массив, что здесь не так?

флаг hr
В вашем скрипте нет шебанга - вы уверены, что php даже интерпретирует его с помощью bash? Что именно вы ожидаете от `declare -A arr == $(...)`? подходит ли вывод вашей команды mysql для назначения * ассоциативному * массиву? В любом случае присвоение массива должно выглядеть как `arr=( ... )`. Почему вы помещаете что-то в массив только для того, чтобы вывести его обратно? Вы тестировали скрипт **вне** php?
флаг cn
Почему вы делаете это, используя BASH, а не PYTHON? НАМНОГО проще
Iosef avatar
флаг in
Вот как сейчас выглядит мой bash-скрипт #!/бин/баш объявить -a arr = $(sudo mysql -u root -h localhost -e "ИСПОЛЬЗОВАТЬ mydb; ВЫБРАТЬ * ОТ пользователей") для i в "${arr[@]}" делать эхо "$я" сделано Я новичок в Ubuntu, я не знаю, как его протестировать вне PHP. Что я хочу сделать, так это получить информацию из mysql и вернуть ее в PHP.
Iosef avatar
флаг in
После получения этого скрипты bash также будут нести ответственность за создание папок в var/www/mysite в зависимости от того, какой фонд находится в базе данных. Я хочу сохранить свой сайт с 755, а также не хочу давать разрешение на запись веб-серверу, поэтому я делаю все это в BASH.
Iosef avatar
флаг in
Это то, что я получаю за пределами php: ./createinstanceinfolder.sh: строка 7: объявлять: `=': недействительный идентификатор ./createinstanceinfolder.sh: строка 7: декларировать: `5': недействительный идентификатор ./createinstanceinfolder.sh: строка 7: declare: `111111111111': недействительный идентификатор ./createinstanceinfolder.sh: строка 7: декларировать: `[email protected]': недействительный идентификатор
Рейтинг:1
флаг in

Я финансирую правильный синтаксис:

#!/бин/баш

set -f # отключить подстановку
IFS=$'\n' # установить разделитель полей в NL (только)
arr=($(sudo mysql -u root -h localhost -e "USE mydb;SELECT * FROM users"))
 
для i в "${arr[@]}"
делать
   эхо "$я"
сделано

Ответить или комментировать

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