2013-04-13 7 views
-4
$id = $_POST['idn']; 
$con=mysqli_connect("localhost","root","xyz","patient"); 
if (mysqli_connect_errno()) 
{ 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
$query = "SELECT count(*) FROM record WHERE ID='$id'"; 
$count = mysql_result(mysql_query($query),0); 
if($count > '0') 
{ 
id exist 
} 
else 
{ 
add id & record 
} 

Что ошибка здесь не проверяет, если ID существует и добавляет продублировать идентификатор где идентификатор RC50001 RC50002 ...... ID определяется как текст в таблицеPHP SQL запросов ERROR в операторе отбора

+0

что значение $ ид? – Cooper

+0

, поскольку, например, 5 не найден (и ваш LIMIT - это всего лишь чушь, потому что запрос будет - если когда-либо - вернется только одна строка.) – djot

+1

Что такое *** полная ошибка ***? Что является результатом 'echo $ query?'? Прекратите использование функций 'mysql_'. – Kermit

ответ

1

не используйте LIKE, используйте =, вы ищете точное соответствие с ID так = правильный оператор сравнения, чтобы использовать в этом случае:

$query = "SELECT * FROM `record` WHERE `ID` = '$id' LIMIT 0 , 300"; 

И вы должны проверить $id в формате йо вы ожидаете, прежде чем вставлять его в запрос. Кроме того, вы должны использовать расширения MySQLi или PDO, а не mysql.

0

Попросите свой код повторить свой запрос, а затем протестируйте его как нечто вроде MySQL workbench или PHPMyAdmin.

Если вы ищете идентификатор, это будет точно. Вы хотите быть осторожным, используя LIKE в своих заявлениях. Например. Если кто-то ищет id = '1', он возвращает одну запись. id LIKE '% 1%' возвращает все записи, содержащие «1».

Это намного безопаснее. Тем более, что вы не делаете ничего с идентификатором в соответствии с вашим примером.

<?php 
    $query = "SELECT count(*) FROM record WHERE ID='$id'"; 
    $count = mysql_result(mysql_query($query),0); 
    if($count > '0'){ 
    echo "ID already exists<br>"; 
    } else { 
    echo($query);   
    die(); 
    } 
?> 

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

<?php 
    try { 
     $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
     $query = "SELECT count(*) FROM record WHERE ID='$id'"; 
        //Checking for no results. 
     if(!empty($dbh->query($query))){ 
      echo "ID already exists."; 
     } else { 
      echo "ID does not exist."; 
     } 
     $dbh = null; 
    } catch (PDOException $e) { 
     print "Error!: " . $e->getMessage() . "<br/>"; 
     die(); 
    } 

?> 

Ах да, и помните:

Предупреждение: Если ваше приложение не поймать исключение, брошенный из конструктору PDO, действие по умолчанию принимается ZEND двигателя является прекратить действие сценарий и отображение обратной трассировки. Эта обратная трассировка будет , вероятно, откроет полную информацию о соединении с базой данных, включая имя пользователя и пароль . Вы несете ответственность за это исключение либо явно (через инструкцию catch), либо неявно через set_exception_handler().

1

Если вы просто проверяете, был ли ID использован в базе данных, будет более эффективным только вернуть количество раз, когда идентификатор использовался вместо того, чтобы возвращать каждую соответствующую запись.

Примечание: это использование MySQLi из-за того, что функции mysql_ * будут устаревать в следующей версии PHP, которая будет выпущена (уже в бета-версии). Вам необходимо будет обновить все функции mysql_*() до mysqli_*().

$query = "SELECT COUNT(*) AS IDCount FROM `record` WHERE `ID` = '$id'"; 
$result = mysqli_query($query) or die("Couldn't execute ID check query."); 
$row = mysqli_fetch_assoc($result); 

if($row['IDCount'] > 0) 
{ 
    echo "ID already exists<br />"; 
} 
+0

Выглядит хорошо. Так как он использует mysql_query в своем примере, это сломается, когда он копирует и вставляет код, хотя он \ * должен \ * использовать это или PDO. –

+0

Ха-ха, надо любить эти перекрывающиеся посты! : P MySQLi разработан, чтобы быть супер легким для замены старых функций mysql_ * ... и все они официально устарели от PHP 5.5.0! – Nerdwood

+0

Я знаю, но вам нужно отметить, что ему придется обновлять больше кода. Поскольку он не получает результатов по его запросу, могут возникнуть другие проблемы. –

0

Я думаю, что вы можете использовать цикл while для поиска совпадающего идентификатора в базе данных, а не только с помощью инструкции if-else.

образец:

if($row != 0) 
{ 
    while ($row = mysql_fetch_assoc($query) 
    { 
    $row['id']; 
    }