PHP中MySQL的记录更新有限制吗?
我编写了一个PHP脚本,将颜色从十六进制转换为RGB和HSL值,并将它们存储在数据库中。我当前的数据集是整个Pantone Solid Coating配色系统,共1341种颜色。我已经有十六进制值了 从那里我访问了数据库,获取十六进制值,进行了两次转换,然后将它们存储回表中 我没有得到任何错误,但更新过程似乎在记录499处停止,尽管我为测试所做的所有值的回声显示计算应用于所有1341种颜色 以下是我到目前为止的脚本:PHP中MySQL的记录更新有限制吗?,php,mysql,mysqli,Php,Mysql,Mysqli,我编写了一个PHP脚本,将颜色从十六进制转换为RGB和HSL值,并将它们存储在数据库中。我当前的数据集是整个Pantone Solid Coating配色系统,共1341种颜色。我已经有十六进制值了 从那里我访问了数据库,获取十六进制值,进行了两次转换,然后将它们存储回表中 我没有得到任何错误,但更新过程似乎在记录499处停止,尽管我为测试所做的所有值的回声显示计算应用于所有1341种颜色 以下是我到目前为止的脚本: // SQL Server Login Info Removed $sql_c
// SQL Server Login Info Removed
$sql_connection = new mysqli($sql_server, $sql_username, $sql_password, $sql_database);
if ($sql_connection->connect_error) {
die("Connection Failed: " . $sql_connection->connect_error);
}
$query = "SELECT * FROM coated";
$result = $sql_connection->query($query);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$colorname = $row["mapName"];
$hexvalue = $row["hex"];
if ($row["rgb"] == '') {
$rgbvalue = hex2rgb($hexvalue);
} else {
$rgbvalue = $row["rgb"];
}
if ($row["hsl"] == '') {
$hslvalue = hex2hsl($hexvalue);
} else {
$hslvalue = $row["hsl"];
}
//echo "Color: " . $row["mapName"] . " | " . $rgbvalue . " | " . $hslvalue . "<br>";
$wrt_query = "UPDATE coated SET hex='".$hexvalue."', rgb='".$rgbvalue."', hsl='".$hslvalue."' WHERE mapName='".$colorname."'";
if ($sql_connection->query($wrt_query) === true) {
echo "Record for " . $colorname . " updated <br>";
} else {
echo "Error updating record for " . $colorname . "<br>";
}
}
}
您可能需要在
php.ini
中增加脚本时间,这里我使用一个php函数来完成。
我认为十六进制作为键更可靠,所以我使用它,因为它总是相同的字段长度。
我已经取出了它的更新,因为你没有改变它。
我也在用mysql做这件事,因为我很狡猾。
备份你的数据库,试试看
set_time_limit(10000);
// SQL Server Login Info Removed
$sql_connection = new mysqli($sql_server, $sql_username, $sql_password, $sql_database);
if ($sql_connection->connect_error) {
die("Connection Failed: " . $sql_connection->connect_error);
}
$query = "SELECT * FROM coated";
$result = $sql_connection->query($query);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$wrt_query =
"UPDATE coated SET
rgb=IF(rgb IS NULL or rgb='','".hex2rgb($row["hex"])."',rgb)',
hsl=IF(hsl IS NULL or hsl='','".hex2hsl($row["hex"])."',hsl)'
WHERE hex='".$row["hex"]."';";
if ($sql_connection->query($wrt_query) === true) {
echo "Record for " . $colorname . " updated <br>";
} else {
echo "Error updating record for " . $colorname . "<br>";
}
}
}
设置时间限制(10000);
//SQL Server登录信息已删除
$sql\u connection=newmysqli($sql\u服务器,$sql\u用户名,$sql\u密码,$sql\u数据库);
如果($sql\u连接->连接\u错误){
die(“连接失败:”.$sql\u连接->连接\u错误);
}
$query=“选择*FROM”;
$result=$sql\u连接->查询($query);
如果($result->num_rows>0){
而($row=$result->fetch_assoc()){
$wrt\U查询=
“更新涂层集
rgb=如果(rgb为NULL或rgb=“”,“.hex2rgb($row[“hex”])。”,rgb),
hsl=IF(hsl为NULL或hsl=“”,“.hex2hsl($row[“hex”])。”,hsl)'
其中十六进制='“$行[“十六进制”]。”;“;
if($sql\u连接->查询($wrt\u查询)==true){
echo“记录为“$colorname.”已更新
“;
}否则{
echo“更新“$colorname.”
的记录时出错;
}
}
}
当您将数据存储在DB中时,需要比平时多一点的时间,因为这不仅仅是I/O操作,我认为您有一个超时时间,或者您应该在小块中执行(这是一个更好的做法),或者在php.ini文件中增加超时时间。您最初的请求是否获得了所有行,或者它们是否被分页或其他内容。没有限制可以阻止您发布数千条更新。更有可能的情况是,您的代码中缺少了记录,或者出现了超时或其他数据库错误,从而中止了脚本。@Octopi添加了摘录。@Octopi pantone-512-C#833177@Octopi导入CSV以创建表格时,长度设置为23。
set_time_limit(10000);
// SQL Server Login Info Removed
$sql_connection = new mysqli($sql_server, $sql_username, $sql_password, $sql_database);
if ($sql_connection->connect_error) {
die("Connection Failed: " . $sql_connection->connect_error);
}
$query = "SELECT * FROM coated";
$result = $sql_connection->query($query);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$wrt_query =
"UPDATE coated SET
rgb=IF(rgb IS NULL or rgb='','".hex2rgb($row["hex"])."',rgb)',
hsl=IF(hsl IS NULL or hsl='','".hex2hsl($row["hex"])."',hsl)'
WHERE hex='".$row["hex"]."';";
if ($sql_connection->query($wrt_query) === true) {
echo "Record for " . $colorname . " updated <br>";
} else {
echo "Error updating record for " . $colorname . "<br>";
}
}
}