我尝试在两个独立的数据库平台上插入一些数据,第一个是mySql,另一个是SQLAnywhere 11。对于mysql,我使用php mysql_query方法插入数据库,而对于SQLAnywhere 11,我使用dbisql命令和php exec()函数。该命令本身在cmd.exe中运行正常,但当我用php尝试它时,它不起作用。
下面是试用代码:
<?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";
}
?>我试着运行这个脚本几次,它总是有效的。
示例:
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"任何帮助都将不胜感激。提前谢谢。
发布于 2016-12-27 14:52:48
“它不工作”是什么意思?它是做一个空记录还是什么都不做?
根据exec quickref的说法
您可以传入指针以获取命令的输出和状态。
$exec = exec($cmd, $output, $pointer);
if(!pointer){
echo "success exec\n";
}
else{
echo "failed exec \n";
} 发布于 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"';
https://stackoverflow.com/questions/41339287
复制相似问题