#mysql #perl
#mysql #perl
Вопрос:
Внутренняя таблица (1)
ID Name Address Phone InsertDate
1 Andrew 12-A,ABC 576849203 2014/05/06
1 Andrew 12-A,ABC 123456789 2014/07/08
Внутренняя таблица (2)
ID Name Address Phone InsertDate
1 Andrew 12-A,ABC 123456789 2014/07/08
Проблема, с которой я столкнулся, заключается в том, что я Select * from table(1) where id='1'
. Он получит две записи. Затем, когда я пытаюсь вставить в table(2)
. В таблице (2) отображается только одна запись вместо 2 записей.
Что мне следует сделать, чтобы я мог получить две записи из таблицы (1) и вставить в таблицу (2)?
Мой пример кода:
$mysql="Select * from table(1) where id='1'";
**Perform the query**
**Retrieve values**
$sth->bind_col(1, $Name);
$sth->bind_col(2, $Address);
$sth->bind_col(3, $Phone);
$sth->bind_col(4, $InsertDate);
if($sth->fetch()){
$mysql="Insert into table(2) values($Name,$Address,$Phone,InsertDate)";
**Perform the query**
}
Спасибо за просмотр, комментарии и ответы!
Комментарии:
1.
if($sth->fetch())
=>while($sth->fetch())
и использовать заполнители для извлечения и вставки. perlmonks.org/?node_id=284436
Ответ №1:
Вы делаете SELECT * FROM table(1)
так, что вы извлекаете все столбцы. Во-первых, ID
поэтому ваша привязка к столбцу неверна, и трудно поверить, что ваш код правильно копирует хотя бы одну запись. Кроме того, вы выполняете fetch
только один раз, поэтому вы пытаетесь вставить только одну из двух строк в table(2)
.
Вам нужно написать что-то вроде этого
my $read = $dbh->prepare(<<'__END_SQL__');
SELECT Name, Address, Phone, InsertDate
FROM table(1)
WHERE ID = ?
__END_SQL__
my $write = $dbh->prepare(<<'__END_SQL__');
INSERT INTO table(2) (Name, Address, Phone, InsertDate)
VALUES (?, ?, ?, ?)
__END_SQL__
$read->execute(1);
while (my $row = $read->fetchrow_arrayref) {
$write->execute(@$row);
}
Но, если нет причины, по которой вы хотите получить доступ на уровне Perl к копируемым записям, вы могли бы позволить базе данных делать все это за вас, вот так
my copy = $dbh->prepare(<<'__END_SQL__');
INSERT INTO table(2) (Name, Address, Phone, InsertDate)
SELECT Name, Address, Phone, InsertDate
FROM table(1)
WHERE ID = ?
__END_SQL__
$copy->execute(1);
Комментарии:
1. Мне нравится ваш стиль heredoc для операторов SQL. Я понимаю, что это близко к тому, что рекомендует Conway, но я все равно делаю закладки для дальнейшего использования. 1
Ответ №2:
прежде всего, убедитесь, что в table2 id или name или каком-либо другом поле не установлено значение primary, иначе это не позволит вам вставлять повторяющиеся записи..
попробуйте этот PHP-код…
result=mysql_query(" select * from table where id=1 ");
while($row=mysql_fetch_assoc($result))
{
$name=$row["Name"];
$address==$row["address"];
$phone==$row["phone"];
$insertdate=$row["insertdate"];
mysql_query( "insert into table2(name,address,phone,insertdate) values('$name','$address','$phone','$insertdate') ");
}
Комментарии:
1. Но … это вопрос Perl
2. спасибо, я действительно думал, что проблема в первичных ключах, предоставленных php для ссылки, но согласен, что это ошибка….