Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL“;在;使用PHP/CLI的子句_Php_Mysql_Command Line Interface - Fatal编程技术网

MySQL“;在;使用PHP/CLI的子句

MySQL“;在;使用PHP/CLI的子句,php,mysql,command-line-interface,Php,Mysql,Command Line Interface,我正在尝试使用PHP exec使用以下命令更新表记录: exec("mysql --user=USER --password=PASS DB_NAME > UPDATE `table` SET option_value='VALUE' where option_name in ('val1','val2')") 它给出了以下错误:语法错误:“(“意外的”。如何在PHP/CLI中使用In子句 注意:我知道我可以使用OR运算符,而在命令行界面上使用密码可能不安全。您不应该使用“

我正在尝试使用PHP exec使用以下命令更新表记录:

exec("mysql --user=USER --password=PASS DB_NAME > 
      UPDATE `table` SET option_value='VALUE' where option_name in ('val1','val2')")
它给出了以下错误:
语法错误:“(“意外的”
。如何在PHP/CLI中使用In子句

注意:我知道我可以使用OR运算符,而在命令行界面上使用密码可能不安全。

您不应该使用“>”来执行SQL语句,“>”用于将输出写入文件,并且“您必须转义“(”,错误由bash而不是php引发。您还可以更改”为了“和逃避”,也要像维韦克说的那样使用-e

exec("mysql --user=USER --password=PASS DB_NAME -e 
      UPDATE `table` SET option_value='VALUE' where option_name in \('val1','val2'\)")

exec('mysql --user=USER --password=PASS DB_NAME -e 
      UPDATE `table` SET option_value='\''VALUE'\'' where option_name in ('\''val1'\'','\''val2'\'')')

字符“>”表示您正在重定向标准输出,而不是执行查询。请改用“-e query”选项。请阅读bash(
manbash
)和mysql_cli(
manmysql
)的文档在继续之前。

你到底为什么不连接到数据库并使用
mysqli
PDO
使用php标记进行更新,但不使用mysqli_*@riggsfully?我不能,否则我不会在这里问问题。这应该由php自动化。在php脚本中创建连接并执行查询是一种自动化。Exec即使是
bash
脚本也可以执行对database的查询,那么为什么要使用
php
呢?从php CLI代码运行简单查询有什么不是自动化的呢?在php CLI中,您可以用与在网页上的php中相同的方式连接到数据库。这比发出
exec命令更容易和更可预测命令
exec("mysql --user=USER --password=PASS DB_NAME -e 
      UPDATE `table` SET option_value='VALUE' where option_name in \('val1','val2'\)")

exec('mysql --user=USER --password=PASS DB_NAME -e 
      UPDATE `table` SET option_value='\''VALUE'\'' where option_name in ('\''val1'\'','\''val2'\'')')