MySQLi подготовил оператор обновления в PHP

Как написать подготовленный оператор обновления? Ссылка:mysqli::prepare

Я попытался написать это, как описано:

  if ($stmt = $mysqli->prepare("UPDATE tblFacilityHrs SET title =? description = ? WHERE uid = ?")){
            $stmt->bind_param('sss', $title, $desc, $uid2);

            //Get params
            $title=$_POST['title'];
            $desc=$_POST['description'];
            $uid2=$_GET['uid'];     

$stmt->execute();
            $stmt->close();
    }
    else {
        //Error
        printf("Prep statment failed: %s\n", $mysqli->error);
    }

Ошибка:

Ошибка подготовки: ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с 'description = ? ГДЕ uid = ?' в строке 1 отредактированная строка.


person 에이바    schedule 16.05.2012    source источник


Ответы (3)


Вам просто не хватает запятой между установленными столбцами:

UPDATE tblFacilityHrs SET title = ?, description = ? WHERE uid = ?
                                ^^^^^^

Когда MySQL сообщает об ошибке, подобной проверьте синтаксис для использования рядом с 'something в руководстве, чаще всего смотрите на символ, непосредственно предшествующий 'something, так как именно здесь возникает ошибка.

Примечание: вам может понадобиться вызвать bind_param() после установки входных переменных, а не до этого. Я не могу вспомнить, как MySQLi анализирует их и когда они связаны, но логически более разумно в коде сначала установить их, а затем привязать.

//Get params
$title=$_POST['title'];
$desc=$_POST['description'];
$uid2=$_GET['uid'];   

$stmt->bind_param('sss', $title, $desc, $uid2);
person Michael Berkowski    schedule 16.05.2012

Вероятно, вам нужно добавить запятые:

$stmt = $mysqli->prepare("UPDATE tblFacilityHrs SET title = ?, description = ? WHERE uid = ?"
person Madara's Ghost    schedule 16.05.2012

Вы привязываете параметры перед назначением их переменным:

$title=$_POST['title'];
$desc=$_POST['description'];
$uid2=$_GET['uid']; 

$stmt->bind_param('sss', $title, $desc, $uid2);

редактировать: зачеркните это, кажется, не имеет значения, связаны ли параметры до или после того, как вы определили переменные (каждый день вы узнаете что-то новое!), но, как сказал Майкл, логически имеет смысл сначала определить их.

person billyonecan    schedule 16.05.2012
comment
Да, определенно имеет смысл иметь их первыми! - person 에이바; 16.05.2012