2011-07-12 5 views
-3

私はPHPで2つのクエリを持っていますし、query2の前にquery1を実行したい、query1はselectクエリで、query2はdelete query.whenです。私はquery2の前にquery1を置くだけで、query1は動作し、query2は動作しません。mysql_queryで動作する

Query1を:

$result = mysql_query('CALL view_polls('.$blogId.');'); 

QUERY2:

$rlt=mysql_query('CALL delete_poll('.$I.');'); 

すべてのコード:

$blogId=1; 
    $r=$_GET['rowNumber']; 

$result = mysql_query('CALL view_polls('.$blogId.');'); 

$row=mysql_fetch_array($result); 
for($i=0;$i<$r;$i++) 
    $row=mysql_fetch_array($result); 
//echo $row['id']; 
$I=$row['id']; 
$rlt=mysql_query('CALL delete_poll(.'$I.');'); ` 

私の手順が選択シンプルで、プロシージャを削除します。

view_pollのPROC:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `prj`.`view_polls` $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `view_polls`(IN b_id INT) 
BEGIN 
select id,title,showPoll,ans1,ans2,ans3,ans4,ans5,ans6 from poll 
where blog_id=b_id; 
END $$ 

DELIMITER ; 

delete_pollのPROC:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `prj`.`delete_poll` $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `delete_poll`(IN I int) 
BEGIN 
    delete from poll 
    where id=I; 
END $$ 

DELIMITER ; 
+3

多分それはview_pollに問題が(存在している可能性があります)と()あなたがdelete_poll(呼び出したときがある)を表示するには何の世論調査がない場合にのみ正しく動作しますか?どのようなエラーが出ますか?プロシージャそのものはどのように見えますか?残りのコードはどのように見えますか? – thetaiko

+0

エラーはありません –

+0

'$ r'はどこから来たのですか? 'for'ループのポイントは何ですか?あなたが達成しようとしていること、あるいは正確には機能していないものが非常に不明です。 – thetaiko

答えて

0
私は $rはどこから来るのか知っているドント

が、最も可能性の高い問題は、あなたが最初の結果の終わりに達しているということです$rowはfalseに設定されており、$IはIDではありません。

+0

いいえ、私は$ Iを印刷し、それはIDです –

0

私はあなたの問題を解決するのに十分な情報がありません。 SQL view_pollsとdelete_pollのコードを投稿できますか?

1)SQLインジェクション攻撃を防ぐには、$ blogIdに必ずmysql_real_escape_stringを使用してください。 2)$ rowを連想配列として扱っているようです。 mysql_fetch_arrayを使用する必要はありません。代わりにmysql_fetch_assocを使用することができます。これは、最初に行う数値インデックスも返さないためです。

それは動作しませんどのように

+0

私は手続きのコード –

+0

申し訳ありませんが、私はあなたの手続きのコードを見ました。彼らはうまく見える、何も間違っているようだ。私が知る限り、これはSQLエラーではありません。これは論理エラーです。私はそれがこれらの行にあると思う: $行= mysql_fetch_array($結果); ($ i = 0; $ i <$ r; $ i ++) $行= mysql_fetch_array($結果); 最初に、$ rowに結果セットを格納するSELECTクエリであるview_rowを呼び出します。しかし、それをループしてmysql_fetch_arrayを再度呼び出すのは間違いです。$ rowはMySQLリソースではなく、配列です。 var_dump()またはprint_r()を実行して、何を得るかを確認してください。 – Ryan

+0

私はこのシェイプでコードを変更すると、それも動作するので、私は思っていません: '$ result = mysql_query( 'CALL view_polls('。$ blogId。 ');'); $ rlt = mysql_query( 'CALL delete_poll(2);'); $行= mysql_fetch_array($結果); ($ i = 0; $ i <$ r; $ i ++) $行= mysql_fetch_array($結果); $ I = $ row ['id']; ' –

関連する問題