2010-09-06 5 views
2

Я пытаюсь выбрать запись в базе данных. У меня проблема с функцией runSelect (функция заключается в выборе записи в базе данных). Я полагаю, что это может быть связано с тем, как я передаю свои переменные в функциях.Передача параметров (PHP)

function select($pUserData){ 
     echo "I am in function select." . "<br/>"; 
     // Create the SQL query 
     $sqlQuery = "SELECT * FROM tablName WHERE id= " . $pUserData[0]; 

     $con = openConnection(); 

     $result = $con->query($sqlQuery); 

     $row = $result->fetch_row(); 

     echo "hello"; 

     echo "ID: " . $row[0] . "<br />"; 
     echo "First Name: " . $row[1] . "<br />"; 

     // Close connection 
     closeConnection($con);   
    }     

    function openConnection() { 
     $connection = new mysqli("localhost", "userName", "password", "databaseName"); 
     if (mysqli_connect_errno()) { 
      echo "Error: Could not connect to database. Please try again later. " . "<br/>"; 
     } 

     echo "in openConnection" . "<br/>";   

     return $connection; 
    } 

    function closeConnection($pCon) { 
     $pCon->close(); 
    } 
    ?> 
+0

Поста некоторого вывод, что происходит при запуске программы? – meagar

+0

Переданы ли параметры в URL-адрес или часть формы POST? –

+0

@Rob Olmos, используя POST – jc70

ответ

0

Следует иметь в виду, что $ _POST только извлекает параметры, которые были POST'ed для скрипта (обычно с помощью отправки формы). Для параметров, переданных через URL-адрес, они будут заполнены в $ _GET. Если метод запроса (POST или GET) является не важно, то $ _REQUEST может помочь обусловленно он получает заполняется как POST и GET (и печенье) параметры:

http://php.net/manual/en/reserved.variables.php

1

Я сделал некоторые изменения в коде, чтобы избежать ошибок, а также сделал некоторую обратную обработку. Такие изменения содержат комментарии, объясняющие их. Я отлаживаю следующий код и отлично работаю.

<?php 
    init(); 

    function init(){ 
     // Retrieve and store data from form 
     $uData = getData(); 

     // Take an action based on value from user 
     switch($uData[5]){ 
      case "select": 
       runSelect($uData); 
       echo "I need to select"; 
       break; 
      case "insert": 
       runInsert($uData); 
       echo "I need to runInsert" . "<br/>"; 
       break; 
      case "update": 
       runUpdate($uData); 
       echo "I need to runUpdate" . "<br/>"; 
       break; 
      case "delete": 
       runDelete($uData); 
       break; 
      default: 
       break; 
     } 

    } // end init() 

    function getData() { 
     $id_num = isset($_REQUEST["id_num"]) ? $_REQUEST["id_num"] : "1"; //if no id is pass let's assume that the user wants the record with id 1 
     $first_name= isset($_REQUEST["first_name"]) ? $_REQUEST["first_name"] : ""; 
     $last_name = isset($_REQUEST["last_name"]) ? $_REQUEST["last_name"] : ""; 
     $major = isset($_REQUEST["major"]) ? $_REQUEST["major"] : ""; 
     $year = isset($_REQUEST["year"]) ? $_REQUEST["year"] : ""; 
     $action = isset($_REQUEST["action"]) ? $_REQUEST["action"] : "select"; //assume the default action as select 

     $userData = array($id_num, $first_name, $last_name, $major, $year, $action); 

     return $userData; 
    } 

    //function runSelect ------------------------------------------------------------------------------------------------- 
    function runSelect($pUData){ 
     echo "I am in runSelect" . "<br/>"; 
     // Create the SQL query 
     $sqlQuery = "SELECT * FROM tblStudents WHERE id= " . $pUData[0]; 

     // Create the connection 
     $con = getConnection(); 

     // Execute query and save results 
     $result = $con->query($sqlQuery); 

     // Display results 
     $row = $result->fetch_row(); 

     echo "hello"; 

     echo "ID: " . $row[0] . "<br />"; 
     echo "First Name: " . $row[1] . "<br />"; 

     // Close connection 
     closeConnection($con); 

    } 



    //function getConnection ------------------------------------------------------------------------------------------------- 
    function getConnection() { 
     $connection = new mysqli("localhost", "userName", "password", "databaseName"); 
     if (mysqli_connect_errno()) { 
      echo "Error: Could not connect to database. Please try again later. " . "<br/>"; 
     } 

     echo "in getConnection" . "<br/>"; 


     return $connection; 
    } 

    //function closeConnection ------------------------------------------------------------------------------------------------- 
    function closeConnection($pCon) { 
     $pCon->close(); 
    } 
    ?> 
1

Основываясь на комментариях, похоже, что запрос не возвратил результат (он установлен в ЛОЖЬ). Поэтому, когда вы пытаетесь извлечь строку, вы получаете фатальную ошибку PHP, но вы отключили вывод ошибки, чтобы вы ее не видели.

Проверьте значение $ результата и если это FALSE проверить, что ошибка с помощью:

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

5
  1. Ваш код открыт для инъекции SQL ...
  2. только предоставляют данные о а не весь входной массив.
  3. Подключение и отключение к db для каждого запроса неэффективно, если вы получили несколько запросов в будущем. Пусть PHP отключится от БД, когда он выйдет, пока не будет необходимости микроконтролировать его (возможно, никогда), и вы сможете лучше управлять своими ресурсами.
  4. Распечатайте содержимое $ _POST с помощью var_export или var_dump в начале вашей программы.
  5. Распечатайте $ result-> num_rows в функции runSelect.
  6. Добавить несколько строк, как это:

    echo '<p>' . __LINE__ . '</p>'; 
    
+0

можно отступать кодовые блоки в списках, просто добавляя лишние символы пробела (я думаю, 3 или 4). Я исправил это для вас. – BoltClock

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