2011-07-31 2 views
1

В моей базе данных mysql я получаю ТОЛЬКО записи для id 26, 16, 17, 18, 19, 22, 23, 24. Почему это, есть ли какая-либо ошибка в мой код? Я не; т иметь ключ, пожалуйста, помогите :(Php foreach loop вставляет только часть записей в таблицу mysql

<? 
$connect = mysql_connect('localhost', 'dbname', 'pass'); 
if (!$connect) { die('Could not connect: ' . mysql_error()); } 
mysql_select_db("dbname") or die(mysql_error()); 

mysql_query("TRUNCATE TABLE anchors"); 

$blog_ids = array(
'anchor 1' => '1', 
'anchor 2' => '2', 
'anchor 3' => '3', 
'anchor 2' => '4', 
'anchor 2' => '5', 
'anchor 4' => '6', 
'anchor 5' => '7', 
'anchor 6' => '8', 
'anchor 7' => '9', 
'anchor 8' => '10', 
'anchor 9' => '13', 
'anchor 10' => '14', 
'anchor 11' => '16', 
'anchor 12' => '17', 
'anchor 13' => '18', 
'anchor 14' => '20', 
'anchor 15' => '21', 
'anchor 16' => '22', 
'anchor 17' => '23', 
'anchor 18' => '24', 
'anchor 19' => '25', 
'anchor 20' => '26' 
); 
foreach($blog_ids as $anchor => $blog_id){ 
$anchor_url = 'http://www.site.com'; 
mysql_query("INSERT INTO anchors (blog_id, anchor_url, anchor) VALUES ('$blog_id', '$anchor_url', '$anchor')"); 
} 

mysql_close($connect); 
?> 

Ты очень много, здесь структура таблицы:

CREATE TABLE `anchors` (
`id` int(11) NOT NULL auto_increment, 
`blog_id` text, 
`anchor_url` text, 
`anchor` text, 
PRIMARY KEY (`id`), 
FULLTEXT KEY `posttitle` (`blog_id`,`anchor_url`,`anchor`) 
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 
+1

Для любви к Богу не убивайте свою базу данных со всеми этими запросами. Создайте одно огромное, комбинированное предложение 'INSERT', содержащее все данные (' INSERT INTO tbl (x, y) VALUES ((x1, y1), (x2, y2), (...)) 'или, по крайней мере, готовые заявления – kba

+0

Привет, Кристиан, я новичок, вы говорите, что не используете цикл foreach? Ty очень много – webmasters

+0

Да. Это эквивалентно перемещению кучи бумаги из одной таблицы в другую, по одному листу за раз, перемещая всю кучу все вместе. Это очень много ненужного трафика. – kba

ответ

0

Проверьте, действительно ли может быть выполнен запрос

if (mysql_query("INSERT INTO anchors (blog_id, anchor_url, anchor) VALUES ('$blog_id', '$anchor_url', '$anchor')") === FALSE) { 
    echo 'failed: ' . mysql_error() . "\n"; 
} 
.

Кроме того, что такое структура таблицы, как? SHOW CREATE TABLE anchors; поможет вам. Если у вас есть уникальный или первичный ключ, значение действительно должно быть уникальным, а дубликаты с ошибкой выходят с ошибкой.

Редактировать: Проблема не в скрипте, а внутри данных. Чтобы иметь данные на PHP, необходимо скорректировать хранилище.

$blog_ids = array(
    array(
    'anchor' => 'anchor 1', 
    'blog_id' => '1' 
), 
    array(
    'anchor' => 'anchor 2', 
    'blog_id' => '2' 
), 
    … 
); 

foreach ($blog_ids as $blog_id_array) { 
    $blog_id = $blog_id_array['blog_id']; 
    $anchor = $blog_id_array['anchor']; 
    $anchor_url = 'http://www.site.com'; 

    if (mysql_query("INSERT INTO anchors (blog_id, anchor_url, anchor) VALUES ('$blog_id', '$anchor_url', '$anchor')") === FALSE) { 
    echo 'failed: ' . mysql_error() . "\n"; 
    } 
} 
+0

Эй, CREATE TABLE 'anchors' ( ' id' INT (11) NOT NULL AUTO_INCREMENT, 'blog_id' текста ' anchor_url' текста, ' anchor' text, PRIMARY KEY ('id'), FULLTEXT KEY' posttitle' ('blog_id',' anchor_url', 'anchor') ) ENGINE = MyISAM AUTO_INCREMENT = 10 DEFAULT CHARSET = utf 8 – webmasters

+0

Это пока прекрасно. Какой вывод вы получаете из 'mysql_error()'? Есть ли запросы, которые терпят неудачу? – Shi

+0

Нет erros aslo, это действительно странно :(Странно, что в моей таблице первое значение foreach первое. – webmasters

0

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

Для инструкций INSERT, mysql_query() возвращает FALSE об ошибках. Вы должны проверить, существуют ли какие-либо ошибки. Я хотел бы изменить свой код, чтобы выглядеть следующим образом:

$result = mysql_query("INSERT INTO anchors (blog_id, anchor_url, anchor) VALUES ('$blog_id', '$anchor_url', '$anchor')"); 

if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

При развертывании, ошибки не обязательно die(), но будет войти в какой-то механизм отчетности или разбора через mysql_error() и вернуть безопасное и дружественное сообщение об ошибке, что Безразлично» t слишком много рассказывают о базовой системе баз данных или выполненных запросах.

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