我正面临着一个让我真正疯狂的问题,我一直在寻找解决方案,但我对php的有限知识还不足以解决它,所以我们走了,希望你能帮助我。
我正在通过PHP生成一个查询,其中包括以下内容:
CREATE USER 'wally'@'localhost' IDENTIFIED BY 'wally123';
GRANT USAGE ON * . * TO 'wally'@'localhost' IDENTIFIED BY 'wally123' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
GRANT ALL PRIVILEGES ON `wally\_%` . * TO 'wally'@'localhost';
CREATE USER 'wally'@'%' IDENTIFIED BY 'wally123'; GRANT USAGE ON * . * TO 'wally'@'%' IDENTIFIED BY 'wally123' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
GRANT ALL PRIVILEGES ON `wally\_%` . * TO 'wally'@'%';
CREATE DATABASE wally_foro;
CREATE DATABASE wally_foro2;
当我在我的phpmyadmin上运行它时它完美无缺,但当我将此查询输入ssh命令并发送它时:
mysql -uMYUSERHERE -pMYPASSWORDHERE -e "CREATE USER 'wally'@'localhost' IDENTIFIED BY 'wally123'; GRANT USAGE ON * . * TO 'wally'@'localhost' IDENTIFIED BY 'wally123' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; GRANT ALL PRIVILEGES ON `wally\_%` . * TO 'wally'@'localhost'; CREATE USER 'wally'@'%' IDENTIFIED BY 'wally123'; GRANT USAGE ON * . * TO 'wally'@'%' IDENTIFIED BY 'wally123' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; GRANT ALL PRIVILEGES ON `wally\_%` . * TO 'wally'@'%'; CREATE DATABASE wally_foro; CREATE DATABASE wally_foro2;"
它只是给我一个错误:
第1行的错误1064(42000):您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在第1行的' TO'wally'@'localhost''附近使用正确的语法*
我需要它是一个ssh连接,但我不知道如何使它工作。为什么它通过line命令退出错误,而不是在phpmyadmin中,如果我认为我不能直接在命令行上使用脚本。我错了吗?
谢谢,非常感谢您的支持!
感谢您的支持。到目前为止,我得到了这个:
mysql -uMYUSER -pMYPASS -e "CREATE DATABASE wally_foro; CREATE DATABASE wally_foro2; CREATE USER 'wally'@'localhost' IDENTIFIED BY 'wally123'; GRANT USAGE ON * . * TO 'wally'@'localhost' IDENTIFIED BY 'wally123' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; GRANT ALL PRIVILEGES ON ``wally\\\_\%`` . * TO 'wally'@'localhost'; CREATE USER 'wally'@'\%' IDENTIFIED BY 'wally123'; GRANT USAGE ON * . * TO 'wally'@'\%' IDENTIFIED BY 'wally123' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; GRANT ALL PRIVILEGES ON ``wally\\\_\%`` . * TO 'wally'@'\%'; "
现在它确实创建了localhost用户以及数据库,但是我认为可能与符号%有关的外部用户,我试图将其删除,并复制它,但仍然无效。
谢谢!
答案 0 :(得分:0)
你有没有试过逃避单引号?
"CREATE USER \'wally\'@\'localhost.....
答案 1 :(得分:0)
反引号是问题所在:它们是一个shell字符,并且正在评估 BEFORE SSH命令行连接到远程服务器。你应该用反斜杠来逃避每一个。
答案 2 :(得分:0)
当我需要在命令行上运行超过1-2个SQL时,我通常将它全部放在一个文本文件中,然后运行它:
mysql -uMYUSER -pMYPASS < /path/to/my/file
当有特定字符(外来字母UTF-8编码)时,它也很有用。
答案 3 :(得分:0)
用单引号替换整个字符串周围的双引号,然后在每个内部单引号前放置反斜杠 - 或 - 使用围绕所有引用参数的"
双引号切换引号,并且'
围绕您希望MySQL执行的整个字符串的单引号。
双引号是一个“弱”引号字符而不是单引号,并且当shell用双引号括起来时,shell仍然会尝试解释某些字符...但不是单引号。
有关此处发生的更多详情,请参阅this DBA.se answer。