mysqli :: prepare не возвращает объект? - PullRequest
0 голосов
/ 11 августа 2011

У меня возникла проблема с привязкой некоторых параметров в операторе MYSQL в php. Выдает ошибку, когда count ($ posts)> 1 в отмеченной строке ниже. Кто-нибудь, кто знает, что я сделал не так? Ошибка: вызов функции-члена bind_param () для необъекта. Он также сообщает о несогласованности коммандера? (В отмеченной строке ниже)

<?php 

include '../../main/mainFunctions2.php';

$futurePosts = json_decode($_POST['futurePosts']);

$repeatSerie = null;
if(count($posts) > 1){

    //Get new repeatSeries
    $stmt = $mysqli->prepare("
    SELECT repeatSerie
    FROM timeSpaces_futurePosts
    ORDER BY repeatSerie DESC
    LIMIT 1
    ");
    $stmt->execute();
    $stmt->bind_result($repeatSerie);
    $stmt->fetch();
    $repeatSerie = ((int)$repeatSerie + 1);
}
$timeStamp = time();
foreach($posts as $fp){
    $title = $fp->title;
    $startDate = $fp->startDate;
    $endDate = $fp->endDate;
    $startTime = $fp->startTime;
    $endTime = $fp->endTime;
    $location = $fp->location;
    $latLong = $fp->latLong;
    $info = $fp->info;
    $photoId = $fp->photoId;
    $invited = $fp->invited;
    if($invited != null){
        $invited = 1;
    }else{
        $invited = 0;
    }
    $reminderType = $fp->reminderType;
    $reminderTimeStamp = $fp->reminderTimeStamp;
    $repeatSerie = $repeatSerie;

    $stmt = $mysqli->prepare("
    INSERT INTO futurePosts (profileId, title, startDate, endDate, startTime, endTime, location, latLong, info, photoId, invited, reminderType, reminderTimeStamp, repeatSerie)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
    );
    $stmt->bind_param('isssiisssiisii', $profileId, $title, $startDate, $endDate, $startTime, $endTime, $location, $latLong, $info, $photoId, $invited, $reminderType, $reminderTimeStamp, $repeatSerie);
    //The line above: Call to a member function bind_param() on a non-object
    $stmt->execute();
    $futurePostId = $mysqli->insert_id;

    if($invited == 1){
        foreach($fp->invited as $friendsId){
            $friendsId = $friendsId;
            $stmt = $mysqli->prepare('
            INSERT INTO futurePosts_invited (profileId, futurePostId, timeStamp)
            VALUES (?, ?, ?)
            ');
            $stmt->bind_param('iii', $friendsId, $futurePostId, $timeStamp);
            $stmt->execute();
        }
    }
}

echo 'TRUE';


?>

Ответы [ 2 ]

3 голосов
/ 11 августа 2011

Скорее всего, это связано с ошибкой строки $stmt = $mysqli->prepare(...); из-за синтаксической ошибки SQL. Попробуйте повторить $mysqli->error, чтобы увидеть, что с ним не так.

Попробуйте вызвать $stmt->store_result(); после выполнения вашего оператора SELECT и перед выполнением любых других запросов к MySQL.

Примечание: вы должны подготовить заявление до foreach цикла. Это даст вам небольшой прирост производительности, поскольку оператор будет скомпилирован только один раз, и при каждом запуске цикла на сервер будут отправляться только параметры.

0 голосов
/ 11 августа 2011

mysqli_prepare () возвращает объект оператора или FALSE в случае ошибки произошло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...