gpt4 book ai didi

javascript - 将 ubuntu 从版本 14 更新到 16。之前是 mysql,现在是 pdo

转载 作者:行者123 更新时间:2023-11-28 04:26:09 25 4
gpt4 key购买 nike

代码是在 mysql 中完成的,现在我转换为 PDO。至少我这么认为。我不是一个优秀的程序员,只是在学习。但是这段代码在 mysql 中工作,自从我切换到 PDO 后,它就不起作用了。它旨在显示黄金以及黄金被扫描的时间。它适用于一款名为 kingsofchaos 的游戏。有些代码没有显示,但有一个greasemonkey(javascript)代码可以获取信息,而php则完成其余的显示和数据库数据。这是此代码的链接。 http://www.kingsofchaos.com/battlefield.php?start=0现在,通用汽车获得了所需的信息,据我所知,如果显示黄金,则会更新数据库,但还没有进行测试。通常原因是???这个 php 应该显示黄金的时间以及多久前它被另一个用户扫描。好吧,我希望我为此留下了足够的信息,但如果不只是让我知道,我会尽力提供。

<?php
require_once("ban.php");
if ($login==0) { die(); }

$list = $_POST['list'];
$list = str_replace("[/d]", "", $list);
$list = explode("[d]", $list);
array_shift($list);

$servername = $config['sqlserver'];
$dbname = $config['sqldb'];
$db = new PDO("mysql:host=$servername;dbname=$dbname", $config['sqluser'], $config['sqlpass']);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

for ($i=0; $i<count($list); $i++) {

$start = strpos($list[$i],"u=")+2;
$end = strpos($list[$i],"*");
$user = trim(substr($list[$i],$start,$end-$start));
/* $user = mysql_real_escape_string(trim(substr($list[$i],$start,$end-$start))); */

$start = strpos($list[$i],"g=")+2;
$end = strpos($list[$i],"*o=0*");
$gold = trim(substr($list[$i],$start,$end-$start));
//print_r($gold);
/* $gold = mysql_real_escape_string(trim(substr($list[$i],$start,$end-$start))); */

$start = strpos($list[$i],"t=")+2;
$end = strpos($list[$i],"--");
$size = trim(substr($list[$i],$start,$end-$start));
/* $size = mysql_real_escape_string(trim(substr($list[$i],$start,$end-$start))); */

$start = strpos($list[$i],"s=")+2;
$sid = trim(substr($list[$i],$start,-1));

try{
$growth = $db->prepare("INSERT INTO `growth` (id, name, size, date) VALUES ('$sid', '$user', '$size', '".time()."')");
$growth->execute();
//From this part to //end doesnt work yet, From information ive gotten from you all, i have got all the other parts working far as i can tell..
if ($gold == "???") {
$stats = $db->prepare("SELECT gold, goldage FROM `stats` WHERE id='$sid' AND name='$user' ");
$stats->execute();
$stats = $stats->fetch(PDO::FETCH_ASSOC);
//$stats = mysql_fetch_array($stats);
$gold2 = number_format($stats['gold']);
if (!$gold2) { $gold2 = "???"; }
if (!$stats['goldage']) { $gold2 = "???"; $goldage = "never updated"; } else { $goldage = duration(time()-$stats['goldage'],1)." ago"; } echo $user.$goldage.";".$gold2." Gold*";
//This is supposed to loop through 20 names on each page and show gold values and how long ago for each.
//end
} else {
$check = $db->prepare("SELECT COUNT(*) FROM `stats` WHERE id='$sid' AND name='$user' LIMIT 1");
$check->execute();
//$check->fetchAll();
$check = $check->fetch(PDO::FETCH_ASSOC);
//$check = mysql_fetch_array($check);
//$check = $check->rowCount();
//$check = $check['COUNT(*)'];
if ($check<1) {
$query = $db->prepare("INSERT INTO `stats` (id, name, size, gold, goldage) VALUES ('$sid', '$user', '$size', '$gold', '".time()."')");
$query->execute();
} else {
$query = $db->prepare("UPDATE `stats` SET size='$size', gold='$gold', goldage='".time()."' WHERE id='$sid' AND name='$user'");
$query->execute();
}
}
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
}

function duration($seconds,$max_periods)
{
$periods = array("year" => 31536000, "month" => 2419200, "week" => 604800, "day" => 86400, "hour" => 3600, "minute" => 60, "second" => 1);
$i = 1;
foreach ( $periods as $period => $period_seconds )
{
$period_duration = floor($seconds / $period_seconds);
$seconds = $seconds % $period_seconds;
if ( $period_duration == 0 )
{
continue;
}
$duration[] = "{$period_duration} {$period}" . ($period_duration > 1 ? 's' : '');
$i++;
if ( $i > $max_periods )
{
break;
}
}
return implode(' ', $duration);
}
$db = null;

?>

最佳答案

我不确定问题是什么,但我对您的代码有一些评论:

 $growth = $db->prepare("INSERT INTO `growth` (id, name, size, date) VALUES ('$sid', '$user', '$size', '".time()."')");
$growth->execute();

在这里利用 pdo 的可能性:

 $growth = $db->prepare("INSERT INTO `growth` 
(id, name, size, date)
VALUES (:sid, :user, :size, '".time()."')");
$growth->bindValue(':sid', $sid);
$growth->bindValue(':user', $user);
$growth->bindValue(':size', $size);

$growth->execute();

这也适用于其他查询。这样 pdo 将确保您的输入正确转义。因此,像“a'o”这样的用户名不会破坏查询,也不会造成伤害

如果查询处于循环中:您只能准备一次(在开始循环之前),然后绑定(bind)正确的值并在循环内执行

附录供评论:

$check = $db->prepare("SELECT COUNT(*) counted
FROM `stats`
WHERE id=:sid AND name=:usr
-- limit 1 will give only 1!
LIMIT 1");
$check->bindValue(':sid', $sid);
$check->bindValue(':usr', $user);

$check->execute();
while($row = $check->fetch(PDO::FETCH_ASSOC)) {
if ($row['counted']<1) {
// do the binding thing here again
$query = $db->prepare("INSERT INTO `stats` (id, name, size, gold, goldage) VALUES ('$sid', '$user', '$size', '$gold', '".time()."')");
$query->execute();
} else {
$query = $db->prepare("UPDATE `stats` SET size='$size', gold='$gold', goldage='".time()."' WHERE id='$sid' AND name='$user'");
$query->execute();
}
}

失败:

  • 您将查询限制为仅 1 行。删除限制 1 以获取更多
  • 你覆盖了$check。我使用上面的$row
  • 您不能将 $check 与 < 1 进行比较:它是一个数组。使用 $row['counted']

关于javascript - 将 ubuntu 从版本 14 更新到 16。之前是 mysql,现在是 pdo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45044223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com