2012-12-31 1 views
0

Я пытаюсь получить следующий скрипт для отправки представленных данных в мою базу данных. Кажется, я терплю неудачу и получаю сообщение от mysqli_error, говорящего, что мой синтаксис sql неверен. Тем не менее, я следую синтаксису, как указано в моей книге.Почему этот mysql-запрос не успешно вставлен в мой db?

Если установлено [Сохранить], это означает, что форма была отправлена. Я попробовал добавить backticks вокруг моих имен столбцов, как было предложено в другом месте в stackoverflow, но безрезультатно.

Вот ошибки я получаю:

«У Вас есть ошибка в вашем SQL синтаксиса, проверьте руководство, которое соответствует Вашей версии сервера MySQL для правильного синтаксиса использовать вблизи«[(` person`, `age`)] VALUES ({$ person, $ age}) 'в строке 1"

Предупреждение: mysqli_fetch_array() ожидает, что параметр 1 будет mysqli_result, boolean задан в C: \ wamp \ www \ contacthmw3 \ index.php в строке 33

Call Stack 
# Time Memory Function Location 
1 0.0024 148104 {main}() ..\index.php:0 
2 0.0163 157640 mysqli_fetch_array () ..\index.php:33 
<?php 
    include_once 'magicquotes.php'; 
    include_once 'db.inc.php'; // connects, sets chars, selects db 
    include_once 'form.php'; // just saves form to $form 

    $sqlselect = 'SELECT person, age FROM people; 
     SELECT email, phone FROM contacts;'; 
    if (!isset($_GET['save'])) { 
     echo $form; 
    } else { 
     $person = $_GET['person']; 
     $age = $_GET['age']; 
     $email = $_GET['email']; 
     $phone = $_GET['phone']; 
     $sqlsave = 'INSERT INTO people (`person`, `age`) VALUES ($person, $age);'; 
     $savedtodb = mysqli_query($link, $sqlsave); 
     if (!$savedtodb) 
     {echo 'Failed to save to db' . mysqli_error($link);} 
     // send form submission to db with sanitized data 
    } 

    $contacts = mysqli_query($link, $sqlselect); //retrieve data into $contacts array 
    if (!$contacts) { 
     echo 'Failed to get contacts from db.' . mysqli_error($link); 
    } 
    while ($row = mysqli_fetch_array($contacts)) { 
     $showme[] = array('person' => $row['person'], 'age' => $row['age']); 


     foreach ($showme as $indiv => $age) { 
      echo $indiv . $age; 
     } 
    } 
    ?> 


    <?php 
    if (isset($_GET['save'])): 
    ?> 
     <p>Last details entered into the table:</p> 
     <table border="1"> 
      <tr> <th>Person</th><th>Age</th><th>Email</th><th>Phone</th></tr> 
      <tr> 

       <td> <?php echo $_GET['person']; ?></td> 
       <td> <?php echo $_GET['age']; ?></td> 
       <td> <?php echo $_GET['email']; ?></td> 
       <td> <?php echo $_GET['phone']; ?></td> 
      </tr> 
     </table> 
    <?php 
     endif; 
    ?> 
+2

Это не тот запрос, который вам рассказала книга. –

+0

Используйте [bind variables] (http://us.php.net/manual/en/mysqli.quickstart.prepared-statements.php) вместо того, чтобы вставлять в запрос неэкранированный и некорректированный ввод. – DCoder

+0

Вы не инициализировали $ link – Sebas

ответ

3

Вы пытаетесь выполнить несколько запросов с использованием mysqli_query(), а не с mysqli_multi_query(); и вы, вероятно, должны запускать один запрос, используя соединение, чтобы получить нужный результат.

+0

О, я не знал об этой функции - спасибо за проницательный совет. Также не знал о присоединениях (я новичок, пожалуйста, медведь со мной). Внимательно оцените помощь Mark1 – gabrielg

+0

Обновление: я выполнил запрос через программу SQL Buddy с фиктивными значениями вместо моих параметров. Оказалось, что я получаю ошибку «непризнанная колонка ...». Исправлено это, исправлено синтаксис инструкции SQL (например, избавился от backticks, которые не помогли), а затем завернул весь оператор INSERT в двойные кавычки, как предложил Niko. Hattip для этой темы, чтобы показать мне хороший синтаксис: http://www.daniweb.com/web-development/php/threads/118055/php-variable-in-mysql-query# – gabrielg

+0

Тем не менее, ваша точка re: mysqli_multi_query разрешена я хотел бы получить оба запроса за один раз, что было целью. – gabrielg

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