2017-08-24 212 views
0

我有一个使用MySQL服务器的android应用程序,并试图找出如何使用INSERT INTO SELECT语句。 这是我在我的PHP脚本中。当我使用'硬代码' 值测试它时,它工作正常。SQL INSERT INTO SELECT语句

<?php 
require "conn.php"; 
$UserID = $_POST["UserID"]; 
$EventID = $_POST["EventID"]; 

$query = "INSERT INTO Interested (UserID, EventID) 
SELECT '$UserID' , '$EventID' FROM Interested 
WHERE NOT EXISTS (SELECT UserID, EventID FROM Interested WHERE UserID = '$UserID' 
AND EventID = '$EventID') LIMIT 1;"; 

$result = mysqli_query($conn ,$query); 
if(mysqli_num_rows($result) > 0) 
{ 
    echo "Interested"; 
} 
else 
{ 
    echo "Duplicate"; 
} 
?> 

的Android给了我这个错误消息

08-24 21:57:39.517 8553-9030/com.example.feelingoodlivinbeta.socialdreams_a1 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3 
    Process: com.example.feelingoodlivinbeta.socialdreams_a1, PID: 8553 
    java.lang.RuntimeException: An error occurred while executing doInBackground() 
     at android.os.AsyncTask$3.done(AsyncTask.java:309) 
     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 
     at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
     at java.lang.Thread.run(Thread.java:818) 
    Caused by: java.lang.ArrayIndexOutOfBoundsException: length=2; index=2 
     at com.example.feelingoodlivinbeta.socialdreams_a1.InterestedFunction.doInBackground(InterestedFunction.java:32) 
     at com.example.feelingoodlivinbeta.socialdreams_a1.InterestedFunction.doInBackground(InterestedFunction.java:24) 
     at android.os.AsyncTask$2.call(AsyncTask.java:295) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)  
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
     at java.lang.Thread.run(Thread.java:818)  
+0

你为什么选择VAR ..? $ UserID,$ EventId ?? – scaisEdge

+1

为什么不只是添加一个唯一索引? –

+0

你的代码容易受到[SQL注入](https://stackoverflow.com/questions/601300/what-is-sql-injection) – litelite

回答

0

日Thnx家伙,我发现通过使用INSERT忽略的解决方案,谢谢您@Barmar共同