2016-12-27 1 views
0

2 개의 별도의 DB 플랫폼에 데이터를 삽입하려고했는데 처음에는 mySql이고 다른 하나는 SQLAnywhere 11입니다. mysql의 경우 PHP를 사용하여 mysql_query 데이터베이스에 데이터를 삽입했습니다. , SQLAnywhere 11의 경우 함수와 함께 dbisql 명령을 사용하고 있습니다. 명령 자체는 cmd.exe에서 제대로 작동하지만 PHP로 시도해도 작동하지 않습니다.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" 

. 미리 감사드립니다.

+0

아마 당신이 명령에 전달하는 인수는 그들이에 depricated대로 mysql_로 * 기능을 제안하지 않는 사용 –

+0

이스케이프 때문에 PHP 5.5.0이며 PHP 7.0.0에서 제거됩니다. mysqli_ * 함수를 대신 사용하십시오. http://php.net/manual/en/function.mysql-query.php –

+0

@SumanBanerjee, 문제는 exec() 함수에 있고 mysql_ * 함수에는 없습니다. 고맙습니다. –

답변

0

"작동하지 않는다"는 의미는 무엇입니까? 빈 레코드 또는 아무것도 수행하지 않습니까?

명령의 출력과 상태를 확인하려면 포인터를 전달할 수 exec quickref

에 따르면.

$exec = exec($cmd, $output, $pointer); 
if(!pointer){ 
    echo "success exec\n"; 
} 
else{ 
echo "failed exec \n";  
} 
+0

안녕하세요 @Pythagoras, 입력 해 주셔서 감사합니다. 그것은 아무것도하지 않습니다. SQLAnywhere 데이터베이스에 1 데이터를 삽입하려고하는 것을 볼 수 있듯이 .php 파일에서 쿼리의 반환 문자열을 추출하여 cmd.exe에 복사하고 잘 실행되고 예상대로 삽입합니다. 문제는 exec() 명령이 실행하려고 할 때 아무 것도하지 않는다는 것입니다. –

+0

@sunstation 다음 구문을 사용하여 오류에 대한 자세한 정보를 얻을 수 있습니다. exec ('some_command 2> & 1', $ output); print_r ($ 출력). 그것은 일어나지 않는 것을 보여줄 것입니다. – Pythagoras

+0

예, 오류는 ODBC 연결에 관한 것입니다, 그것은 ODBC에 연결할 수없는 것처럼 보입니다. 그러나 명령은 cmd.exe에서 완벽하게 작동합니다! –

0

명령에 직접 쿼리를 concatinating되기 때문에 출력은 다음과 같이 될 것입니다 : 명령 프롬프트에

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')

공백 및 특수 문자 포함

012 3,516,

때문에 명령이 될 것입니다

"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"';

관련 문제