web服务php中http请求URL参数存在问题

web服务php中http请求URL参数存在问题,php,mysql,web-services,stored-procedures,httprequest,Php,Mysql,Web Services,Stored Procedures,Httprequest,伙计们,我正在开发一个应用程序,我有一个非常奇怪的问题。我有一个数据库和一个web服务,我在数据库中编写了一些程序和函数,在MySql环境中都能很好地工作,但是当我使用from URL请求时,并没有显示真正的查询(始终运行else条件并向我显示记录“xxxx”,当我了解发送数据的来源不正确且无效时,该记录用于响应,并且不会向我显示空白json,如“[]”),几乎所有内容都是测试内容,如字符集,…(所有内容都是注释)请在下面帮助我,您将在web服务和Mysql:php端和web服务中显示我的代码:

伙计们,我正在开发一个应用程序,我有一个非常奇怪的问题。我有一个数据库和一个web服务,我在数据库中编写了一些程序和函数,在MySql环境中都能很好地工作,但是当我使用from URL请求时,并没有显示真正的查询(始终运行else条件并向我显示记录“xxxx”,当我了解发送数据的来源不正确且无效时,该记录用于响应,并且不会向我显示空白json,如“[]”),几乎所有内容都是测试内容,如字符集,…(所有内容都是注释)请在下面帮助我,您将在web服务和Mysql:php端和web服务中显示我的代码:

<?php
if (isset($_REQUEST['action'])) {
$action = $_REQUEST['action'];
} else {
echo "invalid Data";
exit;
}
switch ($action) {
case "getRecord" :
getRecord($_REQUEST['ID'], $_REQUEST['email'], $_REQUEST['mobile']);
break;
.
.
.
.
default:
echo "Your action select is not true!";
}

FUNCTION getRecord($ID, $Email, $Mobile)
{
$con = mysqli_connect("localhost", "root", "root", "myDB");
/*mb_detect_encoding($ID,"ascii");
mb_detect_encoding($Mobile,"ascii");
mb_detect_encoding($Email,"ascii");*/
mb_convert_encoding($ID, 'ascii');
mb_convert_encoding($Email, 'ascii');
mb_convert_encoding($Mobile, 'ascii');

if (mb_check_encoding($ID, "UTF-8")) {
echo "UTF-8 Yes!!!" . PHP_EOL;
}
if (mb_check_encoding($Email, "UTF-8")) {
echo "UTF-8 Yes!!!" . PHP_EOL;
}
if (mb_check_encoding($Mobile, "UTF-8")) {
echo "UTF-8 Yes!!!" . PHP_EOL;
}


if (mb_check_encoding($ID, "ascii")) {
echo "ascii Yes!!!" . PHP_EOL;
}
if (mb_check_encoding($Email, "ascii")) {
echo "ascii Yes!!!" . PHP_EOL;
}
if (mb_check_encoding($Mobile, "ascii")) {
echo "ascii Yes!!!" . PHP_EOL;
}
if (is_int($ID)) {
echo "ID is Integer Yes!!!" . PHP_EOL;
} else {
echo "ID is not Integer!!!" . PHP_EOL;
}

if (is_int($Email)) {
echo "Email is Integer Yes!!!" . PHP_EOL;
} else {
echo "Email is not Integer!!!" . PHP_EOL;
}

if (is_int($Mobile)) {
echo "Mobile is Integer Yes!!!" . PHP_EOL;
} else {
echo "Mobile is not Integer!!!" . PHP_EOL;
}
//////////////////////////////
if (is_string($ID)) {
echo "ID is String Yes!!!" . PHP_EOL;
} else {
echo "ID is not String!!!" . PHP_EOL;
}

if (is_string($Email)) {
echo "Email is String Yes!!!" . PHP_EOL;
} else {
echo "Email is not String!!!" . PHP_EOL;
}

if (is_string($Mobile)) {
echo "Mobile is String Yes!!!" . PHP_EOL;
} else {
echo "Mobile is not String!!!" . PHP_EOL;
}


//$sql = "SET @p0=''$ID''; SET @p1=''$Email''; SET @p2=''$Mobile''; CALL `getRecord`(@p0, @p1, @p2);";
//$sql = "CALL getRecord(''$ID'',''$Email'',''$Mobile'');";
//$sql = "CALL getRecord(" + "'$ID'" + "," + "'$Email'" + "," + "'$Mobile'" + ");";
//$sql = "CALL getRecord(" + "'$ID'" + "," + "'$Email'" + "," + "'$Mobile'" + ");";
//$sql = "CALL getRecord('2261','saleh@gmail.com','+989999999999');";//this state is good word too, and show me true query 
$sql = "CALL getRecord('$ID','$Email','$Mobile');";
if (mysqli_connect_errno()) {
echo "Failed to connect MySQL server" . mysqli_connect_error();
}
mysqli_set_charset($con, "ascii");
$resualt = mysqli_query($con, $sql);
$records = array();
while ($row = mysqli_fetch_array($resualt)) {
$record = array();
$record['ID'] = $row['ID'];
$record['Name'] = $row['Name'];
$record['Family'] = $row['Family'];
$record['BirthDate'] = $row['BirthDate'];
$record['Email'] = $row['Email'];
$record['Mobile'] = $row['Mobile'];
$records[] = $record;
}
echo json_encode($records);
mysqli_close($con);
}

我想要响应true query bro!!!当我以type number或int的形式发送参数时,响应true query,但当我以type string的形式发送电子邮件和移动参数时,不显示true query并始终在过程中运行else条件。当我处理http请求和php web服务时,这个问题在mySql环境中没有问题,我必须说t他的PHP代码看起来很奇怪,而且是以我无法识别的方式完成的。为什么有一个存储过程来运行一个简单的查询?为什么大量使用
PHP_EOL
?检查UTF-8是严格必要的吗?使用正确的服务器设置应该不会有问题。我不确定你是基于什么,bu警告:使用
mysqli
时,您应该使用and将用户数据添加到查询中。不要使用字符串插值或连接来完成此操作,因为您创建了一个严重的错误。切勿将
$\u POST
$\u GETDELIMITER $$
CREATE PROCEDURE `getRecord` (IN ID VARCHAR(166) CHARACTER SET ascii, IN EMail VARCHAR(166) CHARACTER SET ascii , IN Mobile VARCHAR(166) CHARACTER SET ascii) 
BEGIN
DECLARE CheckMe VARCHAR(166);
DECLARE CountRecords INT;
SET CheckMe = ( SELECT Count(*) FROM persons WHERE persons.Email = Email AND persons.Mobile = Mobile);
IF CheckMe = 1 THEN
SELECT * FROM persons WHERE persons.ID = ID;
ELSE 
SELECT * FROM persons WHERE persons.ID = 'xxxx';
END IF ;
END $$
DELIMITER ;