2014-09-20 2 views
0

У меня есть этот код, и я не могу найти ошибку.mysql Join производит ошибку

public function show(){ 

$x=NULL; 
$owner = $_SESSION['UID']; 
$sql = "SELECT 
kunde.name AS n1, 
rechnung.RechNR AS rnr 
FROM `rechnung`AS rr 
INNER JOIN `kunde` 
ON rr.KID = kunde.KID 
WHERE owner = ? "; 
$stmt = $this->mysqli->prepare($sql); 
$stmt->bind_param("i", $owner); 
$stmt->execute(); 
$result = $stmt->get_result(); 
while ($obj = $result->fetch_object()) { 
$x[] = $obj; 
} 

return $x; 

}

без регистрации я получаю результат с РЕГИСТРИРУЙТЕСЬ Я получил эти сообщения, но я не знаю, почему: Вызов функции члена bind_param() на не-объект

Thx для чтения.

+3

Вы получаете это сообщение, потому что 'prepare' терпит неудачу, возвращая' FALSE'. Нет FALSE-> bind_param'. Он терпит неудачу, поскольку SQL недействителен. Я предполагаю, что вам нужно пространство между '' rechnung'' и 'AS'. –

+1

Любая вероятность того, что поле 'owner' находится в обеих таблицах? Возможно, ему просто нужно дать псевдоним? – sgeddes

+0

Ваш запрос действителен, если вы попытаетесь выполнить его в PHPmyAdmin? Вы должны проверить, что $ _SESSION ['UID'] действителен – sdespont

ответ

3

Вы должны переписать инструкцию SQL и использовать псевдоним для поля RechNr. Вместо rechnung.RechNR вы должны использовать вместо rr.RechNr:

$sql = "SELECT 
kunde.name AS n1, 
rr.RechNR AS rnr 
FROM `rechnung` AS rr 
INNER JOIN `kunde` 
ON rr.KID = kunde.KID 
WHERE owner = ? "; 

Поскольку вы не использовали имя псевдонима, то подготовка заявления сделал неудачу.

+0

+1. Хороший улов .... (OP не просто добавил JOIN, OP также добавил псевдоним в таблицу 'rechnung'.) – spencer7593

+0

Меньше писать в состоянии соединения :-) У меня было то преимущество, что большинство идентификаторов на немецком языке, мой первый язык. – VMai

Смежные вопросы