Php 将长字符串从iOS传递到MySQL数据库

Php 将长字符串从iOS传递到MySQL数据库,php,ios,mysql,Php,Ios,Mysql,我可以从我的iOS应用程序发布到我的MySQL数据库,但是当我有长句的时候 我试图发布以下字符串:“你好,今天好吗?” 它不会做任何事。因此,我即兴创作并将空格替换为,我的字符串看起来像这样“你好,你今天好吗?”和 成功了 但我觉得我必须这么做很奇怪 所以我的问题是,我怎样才能在不修改长字符串的情况下发布带空格的字符串呢 这是我的代码 iOS php代码 <?php // Create connection $servername = "localhost"; $username = "

我可以从我的iOS应用程序发布到我的MySQL数据库,但是当我有长句的时候

我试图发布以下字符串:
“你好,今天好吗?”

它不会做任何事。因此,我即兴创作并将空格替换为
,我的字符串看起来像这样
“你好,你今天好吗?”
和 成功了

但我觉得我必须这么做很奇怪

所以我的问题是,我怎样才能在不修改长字符串的情况下发布带空格的字符串呢

这是我的代码

iOS

php代码

<?php

// Create connection
$servername = "localhost";
$username = "admin";
$password = "root";
$dbname = "dbname";
$con=mysqli_connect("localhost","admin","root","dbname");

if (!$con) {
 die("Connection failed: " . mysqli_connect_error());
 echo "Nothing happened";

}else{


}


if (isset ($_GET["dishname"]))
        $dishname = $_GET["dishname"];

    else
        $dishname = "Null";
if (isset ($_GET["description"]))
        $description = $_GET["description"];
    else
        $description = "Null";

echo "dishname : ". $dishname;
echo "description : ". $description;

$sql = "insert into RecipeFeed (DishName, Description) values ('".$dishname."','".$description."')";
$result = mysqli_query($con, $sql);
?>

这是已经考虑过的事情。不要重新发明轮子。如果您想继续使用GET,请在iOS端使用它来处理编码,并阅读PHP端的相关内容,您可以使用POST(实际上它更适合此功能),并且您不必对任何内容进行编码

我并不认为这需要一个代码示例,我也不是在编写iOS端(因为它在链接中),但PHP端应该是这样的:

$dishname = isset($_POST["dishname"]) ? $_POST["dishname"] : null;
$description = isset($_POST["description"]) ? $_POST["description"] : null;

// do inserts per @tadman's answer
如果出于任何原因需要使用GET

$dishname = isset($_GET["dishname"]) ? urldecode($_GET["dishname"]) : null;
$description = isset($_GET["description"]) ? urldecode($_GET["description"]) : null;

这件事已经考虑过了。不要重新发明轮子。如果您想继续使用GET,请在iOS端使用它来处理编码,并阅读PHP端的相关内容,您可以使用POST(实际上它更适合此功能),并且您不必对任何内容进行编码

我并不认为这需要一个代码示例,我也不是在编写iOS端(因为它在链接中),但PHP端应该是这样的:

$dishname = isset($_POST["dishname"]) ? $_POST["dishname"] : null;
$description = isset($_POST["description"]) ? $_POST["description"] : null;

// do inserts per @tadman's answer
如果出于任何原因需要使用GET

$dishname = isset($_GET["dishname"]) ? urldecode($_GET["dishname"]) : null;
$description = isset($_GET["description"]) ? urldecode($_GET["description"]) : null;

如果您使用面向对象的界面,那么编写代码会更简洁:

$con = new mysqli("localhost","admin","root","dbname");

if ($mysqli->connect_errno) {
  die("Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error);
  // Note, nothing happens after die inside the same block, so
  // don't put code here. It will never, ever run.
}
你也有很多死掉的代码,它们没有做任何被删除的事情

如果小心不使用字符串插值,则使用可以使语句易于阅读,并避免SQL注入问题:

$stmt = $mysqli->prepare("INSERT INTO RecipeFeed (DishName, Description) VALUES (?, ?)");

$stmt->bind_param('ss', $_GET['description'], $_GET['dishname']);

$result = $stmt->execute();

这将为您处理所有的报价,并且作为奖励,您不必担心它们是否被设置。

如果您使用面向对象的界面,那么编写代码会更简洁:

$con = new mysqli("localhost","admin","root","dbname");

if ($mysqli->connect_errno) {
  die("Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error);
  // Note, nothing happens after die inside the same block, so
  // don't put code here. It will never, ever run.
}
你也有很多死掉的代码,它们没有做任何被删除的事情

如果小心不使用字符串插值,则使用可以使语句易于阅读,并避免SQL注入问题:

$stmt = $mysqli->prepare("INSERT INTO RecipeFeed (DishName, Description) VALUES (?, ?)");

$stmt->bind_param('ss', $_GET['description'], $_GET['dishname']);

$result = $stmt->execute();

这将为您处理所有的报价,作为奖励,您不必担心它们是否被设置。

警告:使用
mysqli
时,您应该使用参数化查询,并将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为这样会创建严重的错误。切勿将
$GET
$\u POST
数据直接放入查询中。警告可能重复:使用
mysqli
时,应使用参数化查询,并将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为这样会创建严重的错误。切勿将
$GET
$\u POST
数据直接放入查询中。噢,现在可能是重复的。显然,我是在对一个更早的编辑进行评论。@tadman我知道我在你的评论中添加了代码,但我真的认为它不需要任何代码。哦,现在是了。显然,我是在评论一个更早的编辑。@tadman我知道我在你的评论中添加了代码,但我真的认为它不需要任何代码。