2015-04-15 3 views
0

Я пытаюсь выбрать строки из моей базы данных, которые были вставлены в течение 5 секунд назад.Выбор строк, вставленных в течение 5 секунд назад

Я сейчас работаю с этим запросом:

$timerightnow = date("Y-m-d H:i:s"); 

if($stmt = $con->prepare("SELECT notimessage, 
          Second(TIMEDIFF('$timerightnow',dateofreg)) AS Second1 
          FROM notitb 
          WHERE checked = 0 HAVING Second1 <= 5")){ 

Но он не показывает никаких результатов. Правильно ли я делаю это? Или мой запрос просто некорректен только с самого начала?

+0

Попробуйте использовать 'HAVING Second1 = 5', так как' Second1' является виртуальным, и поэтому он еще не создан при использовании 'WHERE' – Justinas

ответ

1

В вашем запросе обязательно есть синтаксические ошибки. В частности, ваш $ timerightnow - это строка, но она не входит в кавычки, а Second1 является псевдонимом и поэтому не может использоваться в WHERE, его можно использовать только в HAVING. Это поможет вам, если вы увидите ошибки, вместо того, чтобы пытаться отследить их вслепую. Это поможет:

http://php.net/manual/en/mysqli.error.php

Затем, обратите внимание, что prepare не выполняет запрос, он только готовит его. Затем вам необходимо привязать параметры (в частности, я бы привязал текущую дату, а не жестко кодировал ее в строку запроса), а затем вам нужно выполнить запрос через $stmt->execute(). Не ясно, если вы делаете это, потому что ваш код усекается, если нет, то это будет полезно:

http://php.net/manual/en/mysqli.prepare.php

Смотрите пример там, где они готовят запрос, связать некоторые Params, и выполнить его.

Наконец, вы можете хотеть, чтобы ваш предикат был Second1 <= 5 вместо Second1 = 5, если вы хотите получить все, начиная с последних 5 секунд, а не только с тем, что произошло во время второго, что было пять секунд назад.

+0

. Я попытался использовать' HAVING' вместо 'WHERE' для' Second1'. Но не получилось. И я знаю, конечно, с подготовленным заявлением. Я знаю его основы, привязки и исполнения. И для '<=', я забыл об этом. : P –

+0

Я догадался, что вы можете назвать выполнение ниже, но это было неясно :) Во всяком случае, самое главное, вам нужно знать ошибку, с которой ваш запрос терпит неудачу. Можете ли вы попробовать распечатать mysqli_error после вызова execute, чтобы узнать, почему запрос не выполняется? Он должен потерпеть неудачу, по крайней мере, потому, что дата не в кавычках. – Ishamael

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