2013-07-25 5 views
-2

Я уверен, что это настоящий вопрос новичков. Я знаю, что код работает, потому что, когда я тестировал его без функции, он возвращает идентификатор строки «75». Я вставляю его в функцию, и ничего не возвращается. Может ли кто-нибудь посоветовать?PHP-функция не выйдет

function gameID(){ 
     $gameIDsql = mysql_query("SELECT id FROM game WHERE player1='$player1' ORDER BY id DESC LIMIT 1"); 
     $row = mysql_fetch_assoc($gameIDsql); 
     echo $row['id']; 
     } 

gameID(); 
+0

Что такое 'print_r ($ row)'? –

+0

Простой способ отладки в следующий раз: проверить строку 75. Обратите внимание, что поле 'player1' является пустой строкой. Вернитесь назад и посмотрите, что '$ player1' - пустая строка. Обратите внимание, что '$ player1' не определен в этой области (не является частью этой функции и не представлен как глобальный). – BLaZuRE

ответ

1

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

function gameID($player1){ 
    $gameIDsql = mysql_query("SELECT id FROM game WHERE player1='$player1' ORDER BY id DESC LIMIT 1"); 
    $row = mysql_fetch_assoc($gameIDsql); 
    echo $row['id']; 
} 

Это основная проблема с вашим кодом. Другие вопросы включают:

  • Ваш код уязвим для SQL-инъекции. Read this.
  • Не используйте функции mysql_*(), they are deprecated.
2

В вашей функции нет переменной $player1. Вы должны изменить функцию принять аргумент:

function gameID($player1){ 
     $gameIDsql = mysql_query("SELECT id FROM game WHERE player1='$player1' ORDER BY id DESC LIMIT 1"); 
     $row = mysql_fetch_assoc($gameIDsql); 
     echo $row['id']; 
     } 

и называют его:

gameID($player1); 

Вы должны включить отчеты об ошибках, то вы получили сообщение об ошибке, говорящее о том, что переменная не определена ,

+0

Большое спасибо!что-то очень простое! – iYugShell

0

$player1 не определен в области видимости функции, которую нужно отправить его в качестве аргумента для этой функции, такие как:

function gameID($player1){ 
     $gameIDsql = mysql_query("SELECT id FROM game WHERE player1='$player1' ORDER BY id DESC LIMIT 1"); 
     $row = mysql_fetch_assoc($gameIDsql); 
     echo $row['id']; 
     } 

echo gameID(); 
0

Вы должны установить $player1 значение, передав его в качестве аргумента, например:

function gameID($player1){ 
    $gameIDsql = mysql_query("SELECT id FROM game' 
     . ' WHERE player1='$player1' ORDER BY id DESC LIMIT 1"); 
    $row = mysql_fetch_assoc($gameIDsql); 
    echo $row['id']; 
} 

gameID('davey'); 
0

Есть несколько вещей, которые вы можете сделать, чтобы исправить это и предотвратить его. Barmar прав, вам нужно передать переменную $ player1 в вашу функцию, иначе она будет недоступна.

Скорее всего, ваш запрос возвращает ошибку, но вы не поймаете ее, поэтому, когда вы пытаетесь повторить $ row ['id'], ее просто пусто.

При разработке я всегда добавляю: error_reporting (E_ALL); ini_set ("display_errors", "on");

наверху моих файлов php, чтобы увидеть все ошибки и предупреждения.

Что еще более важно, чтобы поймать ошибки, вы можете сделать что-то вроде этого, чтобы убедиться, что ваш запрос работает правильно:

function gameID($player1){ 
    $gameIDsql = mysql_query("SELECT id FROM game WHERE player1='$player1' ORDER BY id DESC LIMIT 1"); 

if(!$gameIDsql) 
throw new Exception=("Unable to get id for player: " . $player1 . " query returned an error: " . mysql_error()); 
    $row = mysql_fetch_assoc($gameIDsql); 
    echo $row['id']; 
    } 

Как правило, вы это просто хорошая практика, чтобы предположить, что если что-то может не, что это будет так лучше всего включить код, который будет обрабатывать ошибки.

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