Основная справка PHP - количество столбцов не совпадает со значением в строке 1 - PullRequest
0 голосов
/ 05 декабря 2011

Я пытаюсь разместить в таблице базы данных 3 разных бита информации, но я получаю ошибку Column count doesn't match value count at row 1

Вот моя структура таблицы базы данных:

    interestID      int(11) auto_increment                          
    name            varchar(100)                                         
    categoryID      int(11)                                  
    interest_desc   varchar(30)                              
    date            timestamp

Форма:

<form id="form_design" method="post" action="interesting.php">
    <fieldset id="input_1">
        <input type="text" id="username" value="name?"   />
    </fieldset>            
    <fieldset id="input_2">
        <input type="text" id="interest" value="your interest?"  />
    </fieldset>   
    <fieldset id="input_3>
       <select id="cats">
           <option value="">--</option>
           <?php 
               $sql = "SELECT   categoryID, category_desc FROM categories "."ORDER BY category_desc"; $rs = mysql_query($sql);

               while($row = mysql_fetch_array($rs))
               { 
                   echo "<option value=\"".$row['categoryID']."\">".$row['category_desc']."</option>\n  "; }
?>                                                                        
        </select>
    </fieldset>
    <input type="submit" name="submit" value="Submit" />
</form>

php, который вставляет его в таблицу, получает количество столбцов, не совпадает со значением в строке 1

PHP -

$interest_user = $_POST['username'];
$interest_name = $_POST['interest'];
$interest_cats = $_POST['cats'];

mysql_query("INSERT INTO interests ( interestID, name, categoryID
                , interest_desc, date )
             VALUES( "",'$interest_user' '$interest_cats'
                , '$interest_name', "" ) ") 
or die(mysql_error());

Ответы [ 2 ]

5 голосов
/ 05 декабря 2011

Отсутствие запятой между '$interest_user' '$interest_cats'

должно быть

'$interest_user', '$interest_cats'

больше проблем: -

mysql_query("INSERT INTO interests 
(interestID,name,categoryID,interest_desc,date)  VALUES( "",'$interest_user' 
'$interest_cats', '$interest_name',""   ) ")

Вы уверены, что не получаете синтаксическую ошибку?

Должно быть: -

mysql_query("INSERT INTO interests 
(interestID,name,categoryID,interest_desc,date)  VALUES( '','$interest_user' 
'$interest_cats', '$interest_name',''   ) ")

Основная проблема решена,
Ваш способ вставки уязвим для инъекции SQL

Вот список, который вы ДОЛЖНЫ сделатьчтение: - https://stackoverflow.com/search?q=sql+injection

0 голосов
/ 05 декабря 2011

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

$query =  sprintf('INSERT INTO interests VALUES('', %s, %s, %s, %s)', $interest_user, $interest_cats, $interest_name);
mysql_query($query);

просто мое личное предпочтение форматирования строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...