2015-09-03 80 views
0

我是一名新開發人員,在嘗試使用修改過的用戶數據更新MYSQL表後接受cc付款。 我已經採取了需要更新或插入到每個表中的所有值和它看起來像的參數是正確的......但表不更新,我收到以下錯誤信息:MYSQL + PHP:使用數組和變量更新表時出現「SQL語法錯誤」

Notice: Undefined variable: msqli in /home/ban50/public_html/app/return.php on line 74 

Notice: Trying to get property of non-object in 
        /home/public_html/app/return.php on line 74 

Error No: 0 - MySQL error You have an error in your SQL syntax; check the 
       manual that corresponds to your MySQL server version for the 
         right syntax to use near '' at line 1 

Query: UPDATE `users` SET membership_id='1', mem_expire='' WHERE username=Blev80 
#0 {main} 

我使用的代碼如下:

這是標準的「直接」變量。該$_POST[]變量是那些我從支付網關接收作爲(陣列):

$host="localhost"; // Host name 
$dbusername="Blev80"; // Mysql username 
$password="MYPASS"; // Mysql password 
$db_name="Blev80DB"; // Database name 
$tbl_name="users"; // Table name 
$mname=$_POST['li_0_product_id']; //membership/product ID 
$appusername=$_POST['username'];//Users "Username" 
$amch = $_POST['li_0_price']; //purchase price 
$amtot = $_POST['total']; //total price 
$curr = 'USD'; //currency 
$muid = $_POST['userid']; // USER ID 

我然後我試圖插入購買的結束日期 - 我想用strtotime (+ 1 month)邏輯在這裏:

$duration = $_POST['li_0_recurrence']; //recurrence calculation 
$eDate =strtotime('+$duration'); //the END date of the purchase 
$memexpire = $eDate ; // my reference for the table (this may be a redundant step but it helps me to think in this way 

用於測試目的我回顯的結束日期:

echo $eDate; 

我認爲上面的工作,但我不能驗證怎麼回事又因爲我似乎有在下面的代碼問題:

$data = array(
       'txn_id' => time(), 
       'membership_id' => $mname, 
       'user_id' => $muid, 
       'rate_amount' => $amch, 
       'tax' => '0', 
       'coupon' => '0', 
       'total' => $amtot, 
       'ip' => $_SERVER['REMOTE_ADDR'], 
       'date' => "NOW()", 
       'pp' => "2CO", 
       'currency' => 'ZAR', 
       'status' => 1); 

if ($_POST['credit_card_processed'] === 'Y') { 



//connect to DB 


$mysqli = new mysqli("$host", "$dbusername", "$password", "$db_name"); 


//build queries 


$query = "UPDATE `users` SET membership_id='$mname', mem_expire='$eDate' WHERE username=$appusername"; 

$mins = "INSERT INTO payments ($data)"; 


//run queries 


$mysqli->query($query); 

$mysqli->query($mins); 


//error checking 


if ($mysqli->error) { 
try {  
    throw new Exception("MySQL error $mysqli->error <br> Query:<br> $query", $msqli->errno);  
} catch(Exception $e) { 
    echo "Error No: ".$e->getCode(). " - ". $e->getMessage() . "<br >"; 
    echo nl2br($e->getTraceAsString()); 
} 
} 

else { 
echo "Thanks database updated"; 
} 


} 
else { 
echo "Credit card payment failed"; 
}` 

所以我對2點線的問題

1)錯誤通知74所引用我的錯誤檢查組件

throw new Exception("MySQL error $mysqli->error <br> Query:<br> $query", $msqli->errno); 

2)的東西是不對的MYSQL語法和表不更新。

  • 我已經嘗試在反引號中附上表引用,但我仍然收到消息。
  • 我曾試圖改變mysqli->errormysqli(error)

  • 我去過無數的SO問題和答案,並已納入代碼中這似乎是必要的

- 老實說,我不知道還有什麼要嘗試 - 我一直在尋找相同的80行代碼2天現在:)

任何幫助或反饋將非常感激!

+0

將用戶名寫入引號WHERE username ='「。$ appusername。」'「;'並將'msqli'改爲'mysqli' – Saty

回答

-1

您更新查詢$query = "UPDATE用戶SET membership_id='$mname', mem_expire='$eDate' WHERE username=$appusername"轉化爲類似

UPDATE `users` 
    SET membership_id='mname', mem_expire='2045-08-09' 
    WHERE username=some_username 

----------------------------- -------^

您在$appusername附近失蹤'


$query = "UPDATE `users` SET `membership_id` = '{$mname}', `mem_expire` = '{$eDate}' WHERE `username` = '{$appusername}" 

不需要在這裏參數報價,因爲沒有字符串的鏈接。

$mysqli = new mysqli("$host", "$dbusername", "$password", "$db_name");