首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP Exec不工作,但命令本身工作正常

问PHP Exec不工作,但命令本身工作正常
EN

Stack Overflow用户
提问于 2016-12-27 13:06:28
回答 2查看 101关注 0票数 0

我尝试在两个独立的数据库平台上插入一些数据,第一个是mySql,另一个是SQLAnywhere 11。对于mysql,我使用php mysql_query方法插入数据库,而对于SQLAnywhere 11,我使用dbisql命令和php exec()函数。该命令本身在cmd.exe中运行正常,但当我用php尝试它时,它不起作用。

下面是试用代码:

代码语言:javascript
复制
   <?php 

    $cid = rand(0, 100);

    $first_name = "Test";

    $last_name = "Test 2";



    $connect = mysql_connect("localhost", "root", "");

    if ($connect) {

        mysql_select_db("db_person");

        $query = mysql_query("INSERT INTO table_person (cid, first_name, last_name) VALUES ($cid, '$first_name', '$last_name')") or die(mysql_error());

        $query2 = "INSERT INTO table_person (cid, first_name, last_name) VALUES ($cid, '$first_name', '$last_name')";

        $cmd = 'C:/"Program Files"/"SQL Anywhere 11"/Bin32/dbisql.exe -d1 '.strtolower($query2).' -c "UID=dba;PWD=axia1234;DSN=Payroll11"';

        $output = NULL;



        $exec = exec($cmd, $output);

        var_dump($output);

    } else {

        echo "Fail";

    }

?>

我试着运行这个脚本几次,它总是有效的。

示例:

代码语言:javascript
复制
C:/"Program Files"/"SQL Anywhere 11"/Bin32/dbisql.exe -d1 insert into table_person (cid, first_name, last_name) values (70, 'test', 'test 2') -c "UID=dba;PWD=axia1234;DSN=Payroll11"

任何帮助都将不胜感激。提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-12-27 14:52:48

“它不工作”是什么意思?它是做一个空记录还是什么都不做?

根据exec quickref的说法

您可以传入指针以获取命令的输出和状态。

代码语言:javascript
复制
 $exec = exec($cmd, $output, $pointer);
 if(!pointer){
   echo "success exec\n"; 
 }
 else{
 echo "failed exec \n";     
 } 
票数 0
EN

Stack Overflow用户

发布于 2016-12-28 08:29:57

由于您将查询直接连接到命令,因此输出将如下所示:

C:/"Program Files"/"SQL Anywhere 11"/Bin32/dbisql.exe -d1 insert into table_person (cid, first_name, last_name) values (70, 'test', 'test 2') -c "UID=dba;PWD=axia1234;DSN=Payroll11"

在命令提示符下,这将是一个错误,因为:

insert into table_person (cid, first_name, last_name) values (70, 'test', 'test 2')

有空格和特殊字符

尝试使用"insert into table_person (cid, first_name, last_name) values (70, 'test', 'test 2')"

所以你的命令是:

$cmd = 'C:/"Program Files"/"SQL Anywhere 11"/Bin32/dbisql.exe -d1 "'.strtolower($query2).'" -c "UID=dba;PWD=axia1234;DSN=Payroll11"';

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41339287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档