我的桌子上有很多行。其中一列称为name
。我还有一个名为blog_id
的新列。我想让每个blog_id
像这样:
$blog_id = strtolower(preg_replace('/-+/', '-', preg_replace('/[^\wáéíóú]/', '-', $name)));
我试过这个:
$con=mysqli_connect("localhost","foo","bar","blog");
$fetch = mysqli_query($con,"SELECT name
FROM entries");
foreach($fetch as $name2){
$id = strtolower(preg_replace('/-+/', '-', preg_replace('/[^\wáéíóú]/', '-', $name2)));
$result = mysqli_query($con,"INSERT INTO entries (blog_id)
VALUES ('$id')");
}
mysqli_close($con);
但我收到错误strtolower() expects parameter 1 to be string, array given
我做错了什么?
答案 0 :(得分:1)
尝试:
foreach($fetch as $row){
$id = strtolower(preg_replace('/-+/', '-', preg_replace('/[^\wáéíóú]/', '-', $row['name'])));
$result = mysqli_query($con,"INSERT INTO entries (blog_id) VALUES ('$id')");
}
你循环遍历每一行,每一行都是你在查询中选择的数组,在本例中是'name',我想你希望循环一个名字数组而不是带名字的行。
修改强>
我可能也会这样做,以确保:
while($row = mysqli_fetch_array($fetch)){
$id = strtolower(preg_replace('/-+/', '-', preg_replace('/[^\wáéíóú]/', '-', $row['name'])));
$result = mysqli_query($con,"INSERT INTO entries (blog_id) VALUES ('$id')");
}
编辑2
您应该更新它们,而不是插入行。 在这种情况下,您还应该获取行的id,因此您的SELECT代码将是:
$fetch = mysqli_query($con,"SELECT id, name FROM entries");
那么你应该这样做:
while($row = mysqli_fetch_array($fetch)){
$id = strtolower(preg_replace('/-+/', '-', preg_replace('/[^\wáéíóú]/', '-', $row['name'])));
$result = mysqli_query($con,"UPDATE entries SET blog_id='".$id."' WHERE id=".$row['id']);
}