我一直在寻找一个非常简单的数据库,其中有4列。第一个是自动识别的本地int,第二个是一个数字ID int,第三个是另一个int,第四个是废弃变量(string)。但我遇到的问题是实际插入3个变量。
在for循环的末尾,$charIDs
变量增加了1,这在我正在抓取的url中使用。$server
变量只是一个静态int,$trimmedName
变量是我从每个网页上刮下来的实际文本,它工作得很好。
for($i = 1; $i <= 5; $i++){
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, "http://website.com/asddas/asda/search?=$charIDs");
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
$dom = new DOMDocument();
$dom->loadHTML($content);
$xpath = new DOMXPath($dom);
$tags = $xpath->query('//*[@id="div_contents"]/div[2]/div[2]/div[2]/div[1]/dl/dd/span/text()');
foreach ($tags as $tag) {
trim($name = $tag->nodeValue);
}
if ($name != null){
$trimmedName = trim($name);
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO players (serverID, charID, charName)
VALUES ('$server', '$charIDs', '$trimmedName')";
$conn->close();
$name = null;
$trimmedName = null;
}
$charIDs++;
}
我已经检查过变量、表名等,但我不确定它为什么不起作用。我可以手动将行插入数据库。
最佳答案
关于你的剧本我注意到了一些事情。
1)您没有执行查询,这是个大问题。
2)仍应使用参数化查询。
3)为什么要在每次迭代中重新创建mysqli和statement对象。
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO players (serverID, charID, charName) VALUES (?,?,?)";
$stmt = $conn->prepare($sql);
if (!$stmt) {
die('could not create statement: ' . $conn->error);
}
for($i = 1; $i <= 5; $i++){
// curl and XML stuff here
$binded = $stmt->bind_param('iis', $server, $charIDs, $trimmedName);
if ($binded) {
echo ($stmt->execute() ? 'Inserted' : 'Did not insert');
}
$charIDs++;
}
$conn->close();