Я пытаюсь сделать приложение iOS, которое связывается с моим сервером через веб-приложения PHP. У меня есть метод в Xcode, который вернет текст на веб-сайте. Он работает со всеми другими сайтами, кроме этого. Он работает, когда вы открываете его в браузере, но не тогда, когда запрос отправляется через приложение. (Я знаю, что есть код, который делает обновление страницы, которое может быть причиной проблемы, но это каждый раз и никогда в версии браузера). Затем он просто возвращает null. Заранее спасибо!
PHP файл:
<?php
require_once 'init.php';
$key = mt_rand(100000, 999999);
$sql= "SELECT * FROM sharing_keys
WHERE unique_key LIKE $key";
$result = $con->query($sql);
if ($result->num_rows > 0) {
// Change number
$page = $_SERVER['PHP_SELF'];
$sec = "1";
header("Refresh: $sec; url=$page");
} else {
$add = "INSERT INTO sharing_keys (unique_key)
VALUES ($key)";
if ($con->query($add) === TRUE) {
echo $key;
} else {
echo "Error: " . $add . "<br>" . $con->error;
}
}
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
?>
Метод Xcode:
-(NSString *)getStringFromURL:(NSString *)url {
NSError *error;
NSString *stringFromFileAtURL = [[NSString alloc]
initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",url]]
encoding:NSUTF8StringEncoding
error:&error];
if (stringFromFileAtURL == nil) {
// an error occurred
NSLog(@"Error reading file at %@\n%@", url, [error localizedFailureReason]);
}
return stringFromFileAtURL;
}
Попробуйте этот подход:
while(true) {
$key = mt_rand(100000, 999999);
$sql= "SELECT * FROM sharing_keys
WHERE unique_key LIKE $key";
$result = $con->query($sql);
if ($result->num_rows > 0){
$add = "INSERT INTO sharing_keys (unique_key)
VALUES ($key)";
if ($con->query($add) === TRUE) {
echo $key;
} else {
echo "Error: " . $add . "<br>" . $con->error;
}
break;
}else {
//sleep for 2 seconds
sleep(2);
}
}
Я не думаю, что это хорошая идея обновить в середине запроса.
Эта логика попытается найти ключ и выйти после его обнаружения. если он не будет спать в течение 2 секунд, повторите попытку, пока не найдете.
Если бы ваша единственная цель состояла в том, чтобы выбрать строку случайным образом, тогда вы должны сделать это в запросе, потому что только Бог знает, сколько времени это займет. вот пример в mysql-сервере:
SELECT * FROM sharing_keys
ORDER BY RAND()
LIMIT 1