2017-09-29 91 views
2

我想找到任何行可用提供的參數,並希望刪除,如果有任何這樣的行與mysqli查詢。我不是PHP開發人員,並試圖爲我的android應用程序製作簡單的API。我已經寫了簡單的API像下面,但我在$query= mysqli_query($conn,"DELETE FROM tbl_fav WHERE fav_id=");選擇和刪除行mysqli查詢

困惑我的API是像下面

<?php 
header('Content-Type: application/json; Charset=UTF-8'); 
include("dbconnection.php"); 
$userid= $_GET['userid']; 
$quoteid= $_GET['quoteid']; 


$query= mysqli_query($conn,"SELECT fav_id FROM tbl_fav WHERE user_id='".$userid."' AND fav_qu_id= '".$quoteid."'"); 

if(mysqli_num_rows($query) > 0){ 

$query= mysqli_query($conn,"DELETE FROM tbl_fav WHERE fav_id="); 
$response="deleted"; 

} 
else{ 

$response= "no_data"; 

} 
echo json_encode($response); 
?> 

讓我知道我可以刪除行,我在第一次查詢的結果得到。 謝謝

+1

[Little Bobby](http://bobby-tables.com/)說*** [您的腳本存在SQL注入攻擊的風險。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql -injection-in-php)***瞭解[MySQLi](http:// http:// http://my.wikipedia.org/wiki/Prepared_statement) php.net/manual/en/mysqli.quickstart.prepared-statements.php)。即使[轉義字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! –

+0

您必須獲得第一個查詢的結果才能包含在第二個查詢中。 –

+0

'WHERE fav_id = $ userid?|| - && $ quoteid?' - 哪一個? –

回答

4

您需要從您的第一個查詢中獲取數據,然後在第二個查詢中使用它。與mysqli_fetch_array()取:

$query= mysqli_query($conn,"SELECT fav_id FROM tbl_fav WHERE user_id='".$userid."' AND fav_qu_id= '".$quoteid."'"); 

if(mysqli_num_rows($query) > 0){ 

    $row=mysqli_fetch_array($query, MYSQLI_ASSOC); // fetch the data 
    $query= mysqli_query($conn,"DELETE FROM tbl_fav WHERE fav_id= $row['fav_id']"); 
    $response="deleted"; 

} else { 

    $response= "no_data"; 

} 

echo json_encode($response); 

一旦獲取,你可以在隨後的查詢中使用的數據。

警告

Little Bobbyyour script is at risk for SQL Injection Attacks.瞭解prepared報表MySQLi。即使escaping the string也不安全!

+0

非常感謝先生:) – Priya

+0

先生您好我收到錯誤解析錯誤:!語法錯誤,意外'(T_ENCAPSED_AND_WHITESPACE),預計在$行查詢標識符(T_STRING)或變量(T_VARIABLE)或數字(T_NUM_STRING)= mysqli_query($康恩,」 DELETE FROM tbl_fav WHERE fav_id = $行[ 'fav_id'] 「); – Priya

+1

我已經解決了它與添加大括號像這樣... {$行[ 'fav_id']}」);謝謝 – Priya

0

與此代碼(如果更換爲$結果$查詢您從SELECT查詢越來越多條記錄修改您的代碼塊。

$result= mysqli_query($conn,"SELECT fav_id FROM tbl_fav WHERE user_id='".$userid."' AND fav_qu_id= '".$quoteid."'"); 

if(mysqli_num_rows($result) > 0) 
{ 
    while ($row = mysql_fetch_array($result, MYSQL_NUM)) 
    { 
     $query= mysqli_query($conn,"DELETE FROM tbl_fav WHERE fav_id=" + $row[0]; 
    } 
    $response="deleted"; 
    mysql_free_result($result); 
} 
+0

按照@Little Bobby的SQL注入指令。 –

+0

如果只返回一行,則不需要while循環。 –

0

我假設你想要得到的fav_id和使用該變量刪除您要刪除的內容,所以這應該是解決

$query= mysqli_query($conn,"SELECT fav_id FROM tbl_fav WHERE user_id='".$userid."' AND fav_qu_id= '".$quoteid."'"); 
if(mysqli_num_rows($query) > 0){ 
    if($row=mysqli_fetch_array($query,MYSQLI_ASSOC)){ 
     $result=$row["fav_ID"]; 
    } 
    $query= mysqli_query($conn,"DELETE FROM tbl_fav WHERE fav_id='$result'"); 
    $response="deleted"; 
} else { 
    $response= "no_data"; 
} 
+0

如果只返回一個結果,則不需要while循環。 –

+0

真實的,它改變,如果 被太多while循環最近笑 –

+0

你的括號是關閉工作。 –

0

因爲我沒有足夠的代表處發表評論,只是還沒有,我想對@Pritesh帕特爾的答案和一些意見擴大。

假設fav_id是表的主鍵,第一個查詢可能會返回多條記錄。

所以要麼LIMIT 1應該被添加到查詢中,或者應該在結果上使用while循環(因爲它在答案中)......並且因爲它不能說太多次,所以listen到小鮑比表..始終保護免受SQL注入!

+0

請求。同意我的新答案。 –

0

@Priya,Pls。如果你只有1條記錄,而你對我以前的答案不同意,請找到比其他所有方案更好的解決方案。您不需要爲您正在使用同一個表tbl_fav操縱的東西,使事情複雜。(這對於SELECT查詢返回只有一個記錄)

$query= mysqli_query($conn,"DELETE FROM tbl_fav WHERE user_id='".$userid."' AND fav_qu_id= '".$quoteid."'"); 

此外,想想SQL注入。 快樂編碼