PHP codeigniterでOracle 10g Express Editionを使用しています。PHPでストアドプロシージャを呼び出す際にエラーが発生しました。リテラルが書式文字列と一致しません
私はテーブルtbl_movieている: -
CREATE TABLE tbl_movie (movie_id NUMBER(11) PRIMARY KEY,
movie_title VARCHAR2(255) NOT NULL,
movie_image VARCHAR2(255) NOT NULL,
language_id NUMBER(11) NOT NULL REFERENCES tbl_language(language_id) ON DELETE CASCADE,
showtime_id NUMBER(11) NOT NULL REFERENCES tbl_showtime(showtime_id) ON DELETE CASCADE,
movie_sdate DATE NOT NULL,
movie_edate DATE NOT NULL,
movie_add_date DATE NOT NULL
);
今、私はOracleのコマンドラインを通してそれを実行することにより、手順を作成しました: -
CREATE OR REPLACE PROCEDURE
insertMovie (id IN NUMBER, title IN VARCHAR2, image IN VARCHAR2, language IN NUMBER, showtime IN NUMBER, sdate IN DATE, edate IN DATE, adate IN DATE, message OUT NUMBER)
IS
BEGIN
INSERT INTO tbl_movie (movie_id, movie_title, movie_image, language_id, showtime_id, movie_sdate, movie_edate, movie_add_date)
VALUES (id, title, image, language, showtime, TO_DATE(sdate, 'YYYY-MM-DD hh24:mi:ss'), TO_DATE(edate, 'YYYY-MM-DD hh24:mi:ss'), TO_DATE(adate, 'YYYY-MM-DD hh24:mi:ss'));
message := 1;
EXCEPTION
WHEN OTHERS THEN
message := 0;
END;
/
これは私のCodeIgniterのコントローラからのコードです: -
public function testMovie()
{
$insertData['movie_id'] = 1;
$insertData['movie_title']= 'test';
$insertData['movie_image']= 'rfgt';
$insertData['language_id']= 1;
$insertData['showtime_id']= 1;
$insertData['movie_sdate']= '2017-02-24 00:00:00';
$insertData['movie_edate']= '2017-02-27 00:00:00';
$insertData['movie_add_date']= '2017-02-20 00:00:00';
$this->load->model('oracle_model');
$return = $this->oracle_model->add_movie('movie',$insertData,'');
}
これは手続きを呼び出すためのモデル関数です。 -
function add_movie($entity,$insertData,$time)
{
print_r($insertData);
$conn = oci_connect("xxxxxx", "xxxxxx","xxxxxxxxx");
if(!$conn)
{
echo "connect failed".oci_error();
}
else
{
echo "connect done at".date('d-m-y');
// calling stored procedure insertMovie
$insertMovieProcedureSQL = "BEGIN insertMovie(:id, :title, :image, :language, :showtime, :sdate, :edate, :adate, :message); END;";
$stmt = oci_parse($conn, $insertMovieProcedureSQL);
// Bind the input parameter
oci_bind_by_name($stmt,':id',$insertData['movie_id']);
oci_bind_by_name($stmt,':title',$insertData['movie_title']);
oci_bind_by_name($stmt,':image',$insertData['movie_image']);
oci_bind_by_name($stmt,':language',$insertData['language_id']);
oci_bind_by_name($stmt,':showtime',$insertData['showtime_id']);
oci_bind_by_name($stmt,':sdate',$insertData['movie_sdate']);
oci_bind_by_name($stmt,':edate',$insertData['movie_edate']);
oci_bind_by_name($stmt,':adate',$insertData['movie_add_date']);
// Bind the output parameter
oci_bind_by_name($stmt,':message',$message);
oci_execute($stmt);
// $message is now populated with the output value
echo "$message\n";
}
}
私は機能を実行している、私は次のエラーを取得しています: - 私はすべての日付データ型の列を排除することによって、プロシージャを実行しようとしたとき
oci_execute(): ORA-01861: literal does not match format string ORA-06512: at line 1
、コードが細かい実行されています。私は主な問題は、日付の列と考えています。
しかし、私は、コマンドラインからこのクエリを実行すると、データが正常に挿入されます: -
INSERT INTO tbl_movie (movie_id, movie_title, movie_image, language_id, showtime_id, movie_sdate, movie_edate, movie_add_date)
VALUES (2, 'title', 'image', 2, 3, TO_DATE('2017-02-24 00:00:00', 'YYYY-MM-DD hh24:mi:ss'), TO_DATE('2017-02-27 00:00:00', 'YYYY-MM-DD hh24:mi:ss'), TO_DATE('2017-02-20 00:00:00', 'YYYY-MM-DD hh24:mi:ss'));
私が間違って何をしているのですか?私は4時間近く立ち往生しています。
先生、私は専門家ではないですが、単にPHPMyAdminの中のストアプロシージャを作成して、私はまた、あなたはあなたの区切り文字をチェックしてみてくださいすることができて、ストアドプロシージャでの正しい区切り記号を与えていないため動けなくなります。 @Saswat –