Cześć,
mam następujący problem, zrobiłem sobie komunikację z bazą danych mySQL z aplikacji napisanej w C# za pośrednictwem PHP. C# wywołuje PHP za pomocą WWWForm oraz WWW, co działa poprawnie dla wielu innych skryptów.
Jednak problem pojawia się, gdy jedna z funkcji otrzymuje dane za pomocą $_POST - wartości te są przepisywane do zmiennych, które następnie wykorzystywane są do conn->query(). Gdy wykorzystuje te zmienne to się query wysypuje (select nie zwraca wiersza, a identyczną komendą zwracam z bazy danych ręcznie).
Najdziwniejsze jest to, że gdy wpiszę bezpośrednio wartości stałe na tych samych zmiennych, to wszystko działa tak jak powinno. Tak więc "admin" nie jest równy "admin" z $_POST.
Sprawdziłem dla pewności typ zmiennej przychodzącej z $_POST - są to Stringi.
Nie bardzo wiem, dlaczego to nie działa, skoro w innych skryptach php zrobiłem identycznie. Czy jest jakaś możliwość, że wymagana, w którymś miejscu konwersja danych lub zrobiłem jakiś błąd szwedzki?
$_SESSION wykorzystuję tylko do diagnostyki, żeby wyświetlić sobie na konsoli w Unity.
<?php
session_start();
$roomName = $_POST['roomName'];
$gmNick = $_POST['gmNickName'];
//$roomName = "gggg"; //jak wpisuje constansy, to dziala
//$gmNick = "admin";
$_SESSION['createRoom_dataType'] = gettype($roomName).gettype($gmNick);
$_SESSION['createRoom_room'] = $roomName;
$_SESSION['createRoom_gmNick'] = $gmNick;
require_once "connect.php";
require_once "iniData.php";
//***********TWORZENIE BAZY DANYCH DLA POKOJU***********
$conn_createRoom = new mysqli($host, $db_user, $db_password);
$conn_createRoom->query('CREATE DATABASE '.$roomName);
$conn_createRoom->query('CREATE TABLE IF NOT EXISTS `'.$roomName.'`.`heroes` (
`playerNick` TINYTEXT NOT NULL ,
`build` INT NOT NULL ,
`look` TINYINT NOT NULL ,
`position` TINYTEXT NOT NULL ,
`updatePosition` TINYINT NOT NULL ,
`inventory` TINYTEXT NOT NULL ,
`s3` SMALLINT NOT NULL ,
`s4` SMALLINT NOT NULL ,
`s5` SMALLINT NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci');
$conn_createRoom->query('CREATE TABLE IF NOT EXISTS `'.$roomName.'`.`global` (
`stage` SMALLINT NOT NULL ,
`gm` TINYTEXT NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci');
$conn_createRoom->close();
//***********ŁĄCZENIE SIĘ Z GŁÓWNĄ BAZĄ DANYCH***********
$conn_globalDB = new mysqli($host, $db_user, $db_password, $ini_dbName);
if ($conn_globalDB->connect_errno!=0)
{ $_SESSION['createRoom_error'] = "[ createRoom.php:Err ] Connection error: ".$conn_globalDB->connect_errno; }
else
{
$_SESSION['createRoom_stepInfo'] = "[ createRoom.php:StepInfo ] Connected to DB ".$ini_dbName;
$gmNick = htmlentities($gmNick, ENT_QUOTES, "UTF-8");
if ($result = @$conn_globalDB->query(
sprintf("SELECT * FROM accounts WHERE playerNick='%s'",
mysqli_real_escape_string($conn_globalDB, $gmNick))))
{
$rowsAmount = $result->num_rows;
$_SESSION['createRoom_stepInfo'] = "[ createRoom.php:StepInfo ] SELECT done, rowsAmount: ".$rowsAmount;
if($rowsAmount>0)
{
$gmData = $result->fetch_assoc();
$gmBuild = $gmData['build'];
$gmLook = $gmData['look'];
$_SESSION['createRoom_gmBuild'] = $gmBuild;
$_SESSION['createRoom_gmLook'] = $gmLook;
echo date('Y-m-d H:i:s.u');
$_SESSION['createRoom_date'] = date('Y-m-d H:i:s.u');
$conn_globalDB->query(
'INSERT INTO `rooms` (`room`, `usersAmount`, `date`) VALUES ("'
.$roomName. '", '
.'1, "'
.date('Y-m-d H:i:s.u'). '")'
);
$result->free_result();
} else { $_SESSION['createRoom_error'] = "[ createRoom.php:Err ] SELECT returned 0 rows";}
} else { $_SESSION['createRoom_error'] = "[ createRoom.php:Err ] Could not execute query"; }
$conn_globalDB->close();
}
//***********ŁACZENIE SIĘ ZE STWORZONĄ BAZĄ DANYCH POKOJU***********
$conn_addHero = new mysqli($host, $db_user, $db_password, $roomName);
$conn_addHero->query( "INSERT INTO `global` (`stage`, `gm`) VALUES (1, '$gmNick')" );
$conn_addHero->query(
'INSERT INTO `heroes` (`playerNick`, `build`, `look`, `position`, `updatePosition`, `inventory`, `s3`, `s4`, `s5`) VALUES ("'
.$gmNick. '", '
.$gmBuild. ', '
.$gmLook. ', "'
.$ini_arrayPos. '", '
.$ini_upPos. ', "'
.$ini_arrayEq. '", '
.$ini_r. ', '
.$ini_r. ', '
.$ini_r. ")"
);
$conn_addHero->Close();
?>
<?php
//Konfiguracja bazy danych serwera
$ini_dbName = "gamedb";
//Wartości początkowe podczas tworzenia pokoju
$ini_r = 0;
$ini_upPos = 1;
$ini_arrayPos = "000000";
$ini_arrayEq = "0000000000000000";
?>
<?php
date_default_timezone_set('Europe/Warsaw');
$host = "localhost";
$db_user = "root";
$db_password = "";
?>
public void createRoom()
{
room_name = room_nameInput.GetComponent<InputField>().text;
Debug.Log("Room " + room_name + " has been done by " + local_user);
WWWForm registerForm = new WWWForm();
registerForm.AddField("roomName", room_name);
registerForm.AddField("gmNickName", local_user);
WWW put = new WWW(phpDir + "createRoom.php", registerForm);
StartCoroutine(uploadData(put));
string test;
StartCoroutine(downloadData("get_createRoomData.php", (x) => test = x));
}