2017-06-01 62 views
0

我想這個查詢MySQL的預處理語句無法正常工作

$lat = -14.4428711; 
$long = 28.447634; 
$userFk = 11; 
$stmt = $this->conn->prepare("SELECT p.`id`, p.`storeFk`, p.`name`, p.`price`, p.`quantity`, p.`image`, s.`name` ,(SELECT COUNT(*) FROM tblpromotion WHERE productFk = p.`id`) 

    as promotional , s.`profilepicture`,3956 * 2 * ASIN(SQRT(POWER(SIN((? - s.latitude)*pi()/180/2),2) +COS(? *pi()/180)*COS(?*pi()/180) * 


    POWER(SIN((?-s.longitude)*pi()/180/2),2))) as distance, p.`dateCreated` FROM `tblproduct` p JOIN `tblstore` s ON p.`storeFk` = s.`id` JOIN tblshoppinglist l ON (


    l.name LIKE concat('%',p.name,'%') AND l.userFk = ?) WHERE s.longitude between (?-100/cos(radians(?))*69) and (? +100/cos(radians(? 



    ))*69) and s.latitude between (?-(100/69)) and (? +(100 /69)) GROUP BY p.`id` having distance < 100 ORDER BY distance"); 


$stmt->bind_param("sssssssssss", $lat, $lat, $lat, $long, $user, $long, $lat, $long, $lat, $lat, $lat); 
$stmt->execute(); 
$response["products"] = array(); 
$stmt->bind_result($id, $storeFk, $name, $price, $quantity, $itemImage, $shopName, $promotional, $shopProfilePic, $distance, $dateCreated); 
while($row = $stmt->fetch()) 
{ 
    $product = array(); 
    $product["id"] = $id; 
    $product["storeFk"] = $storeFk; 
    $product["itemName"] = $name; 
    $product["price"] = $price; 
    $product["quantity"] = $quantity; 
    $product["itemImage"] = $itemImage; 
    $product["shopName"] = $shopName; 
    $product["promotional"] = $promotional; 
    $product["shopProfilePic"] = $shopProfilePic; 
    $product["distance"] = $distance; 
    $product["dateCreated"] = $dateCreated; 
    $response["products"][] = $product; 

} 

獲取結果,但沒有得到任何東西,當我和值替換它,我得到的結果一樣

SELECT p.`id`, p.`storeFk`, p.`name`, p.`price`, p.`quantity`, p.`image`, s.`name` ,(SELECT COUNT(*) FROM tblpromotion WHERE productFk = p.`id`) as promotional , s.`profilepicture`,3956 * 2 * ASIN(SQRT(POWER(SIN((-14.4428711 - s.latitude)*pi()/180/2),2) +COS(-14.4428711 *pi()/180)*COS(-14.4428711*pi()/180) *POWER(SIN((28.447634-s.longitude)*pi()/180/2),2))) as distance, p.`dateCreated` FROM `tblproduct` p JOIN `tblstore` s ON p.`storeFk` = s.`id` JOIN tblshoppinglist l ON (l.name LIKE concat('%',p.name,'%') AND l.userFk = 11) WHERE s.longitude between (28.447634-100/cos(radians(-14.4428711))*69) and (28.447634 +100/cos(radians(-14.4428711))*69) and s.latitude between (-14.4428711-(100/69)) and (-14.4428711 +(100 /69)) GROUP BY p.`id` having distance < 100 ORDER BY distance 

是新來的Php準備了報表,我哪裏出錯了?

+0

H你檢查你的SQL查詢 - 它是否返回MySQL中的東西? –

+0

絕對值的第二個是返回值,但是當我將它重寫爲準備語句時,它不返回任何內容。 –

+0

$ stmt-> bind_param(「sssssssssss」,$ lat,$ lat,$ lat,$ long,$ userFk,$ long,$ lat,$ long,$ lat,$ lat,$ lat);更換這條線 –

回答

0

好傢伙,替換這一行,你必須在代碼:)

$stmt->bind_param("sssssssssss", $lat, $lat, $lat, $long, $userFk, $long, $lat, $long, $lat, $lat, $lat); 
+0

你改變了什麼?我無法發現任何區別。 「替換這一行」,爲什麼?一個好的答案總是會包含一個解釋,說明改變了什麼 - 以及爲什麼。 – Qirel

+0

有一個錯誤在那一行中,他使用了一個未定義的變量 –

0

個錯誤 - 絃樂

d - 雙

我 - 爲整數

b - 用於blob

$stmt->bind_param("sssssssssss", $lat, $lat, $lat, $long, $user, $long, $lat, $long, $lat, $lat, $lat);