SSH上的SQL查询无法正常工作

时间:2013-09-24 03:16:24

标签: php mysql sql ssh

我正面临着一个让我真正疯狂的问题,我一直在寻找解决方案,但我对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用户以及数据库,但是我认为可能与符号%有关的外部用户,我试图将其删除,并复制它,但仍然无效。

谢谢!

4 个答案:

答案 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