2016-09-06 2 views
0

я имею ошибку «вызов функции члена bind_param() на не-объекте»переменной цикла в парах

на этой линии $stmt->bind_param("ss", $influencer_id, $campaign_id);

public function getCouponDetailsMenu($influencer_id) 
    { 

    $stmt = $this->con->prepare("SELECT id, campaign_id, campaign_name, status, type_of_campaign, client, brand, influencers, max_coupons, distributed_coupons, expired_coupons, claimed_coupons, coupon_expiry, campaign_start_date, campaign_end_date FROM tbl_campaign WHERE influencers=?"); 
    $stmt->bind_param("s",$influencer_id); 
    $stmt->execute(); 
    $stmt->bind_result($id, $campaign_id, $campaign_name, $status, $type_of_campaign, $client, $brand, $influencers, $max_coupons, $distributed_coupons, $expired_coupons, $claimed_coupons, $coupon_expiry, $campaign_start_date, $campaign_end_date); 
    $campaigns = array(); 
    while($stmt->fetch()) 
    { 

     $temp['id']=$id; 
     $temp['campaign_id'] = $campaign_id; 
     $temp['campaign_name'] = $campaign_name; 
     $temp['status']=$status; 
     $temp['type_of_campaign']=$type_of_campaign; 
     $temp['client']=$client; 
     $temp['brand']=$brand; 
     $temp['influencers']=$influencers; 
     $temp['max_coupons']=$max_coupons; 
     $temp['distributed_coupons']=$distributed_coupons; 
     $temp['expired_coupons']=$expired_coupons; 
     $temp['claimed_coupons']=$claimed_coupons; 
     $temp['coupon_expiry']=$coupon_expiry; 
     $temp['campaign_start_date']=$campaign_start_date; 
     $temp['campaign_end_date']=$campaign_end_date; 
     $temp['logo'] = $this->getDistributedEmail($influencer_id, $campaign_id); 
     array_push($campaigns, $temp); 
    } 
    $stmt->close(); 
    return $campaigns; 

    } 

} 

//Method to get distributed email 
public function getDistributedEmail($influencer_id, $campaign_id) 
{ 
    $stmt = $this->con->prepare("SELECT user_email_address FROM tbl_coupons WHERE influencer_id=? and campaign_id=?"); 
    $stmt->bind_param("ss", $influencer_id, $campaign_id); 
    $stmt->execute(); 
    $stmt->bind_result($eadd); 
    $email = array(); 
    while($stmt->fetch()) 
    { 
    $temp = $eadd; 
    array_push($email, $temp); 
    } 
    $stmt->close(); 
    return $email; 
} 
+0

Почему тэг * javascript? – DavidDomain

+1

Возможно, ваш '$ stmt' не является объектом, и он может быть« ложным »при подготовке. –

+0

Я проверил его много раз правильно. – Crys

ответ

0

кажется $stmt не объект. попробуйте отладить его, используя var_dump($stmt); сразу после вашего вызова.

Я думаю, что это произошло, потому что отправленный ему оператор sql недействителен в текущей БД.

звучит как выходит из строя подготовки вызова (не знаю почему), и поэтому она возвращает false - false is not an object, так что вы не можете назвать bind_param() на этого.

Если сервер базы данных успешно подготовил оператор, PDO :: prepare() возвращает объект PDOStatement. Если сервер базы данных не может успешно подготовить оператор, PDO :: prepare() возвращает FALSE или испускает PDOException (в зависимости от обработки ошибок).

+0

результат var_dump "bool (false)" – Crys

+0

Итак, я думаю, вы должны проверить, подключаетесь ли вы к базе данных точно? и после этого проверьте свой SQL-запрос. Действительно ли это работает (без ошибок и возврата, по крайней мере, на запись)? –

0

установил ее, поставив

$ stmt-> store_result();

после

$ Темп [ 'campaign_end_date'] = $ campaign_end_date;