插入操作时避免MySql省略+号

时间:2019-03-26 12:15:43

标签: php android mysql

MySql数据库以及持有utf8_unicode_ci归类的表和列。这就是我通过核心PHP在mysql表中插入一行的方法:

  

这是服务器页面文件名为getregister.php的核心PHP代码。

$Insert = $con->query("INSERT INTO `USERS` (`ID`, `NAME`, `PHONE`, `CODE`) VALUES (NULL, '$NewUserName', '$NewUserMobile', '$UserCode')");
if ($Insert === false)
{
     echo "REPORT DEVELOPER EXCEPTION_CODE_7";
     exit();
}
else
{
     echo "SUCCESS_NEW"; 
     exit();
}

在android设备布局Edittext中,我允许+ Character too的最终用户使用0到9:

  

这是用于edittext XML的本地android代码

<EditText
        android:id="@+id/UserPhone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/UserName"
        android:hint="NUMBER  HERE.."
        android:layout_marginBottom="15dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="2dp"
        app:met_iconPadding="0dp"
        app:met_iconRight="@drawable/ic_phone"
        app:met_minCharacters="10"
        app:met_maxCharacters="20"
        android:inputType="number"
        android:digits="0,1,2,3,4,5,6,7,8,9,+"
        android:textStyle="bold" />

这就是我打开与服务器PHP页面的连接的方式:

  

这是一个Java代码,并且是适合布局的Java代码

String urlParameters = "DEVICEID="+deviceid+"&NAME="+name+"&PHONE="+phone+"&CODE="+code;
URL url = new URL("https://example.com/getregister.php");
connection = url.openConnection();
connection.setDoOutput(true);

OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());

writer.write(urlParameters);
writer.flush();

Log.d("GetRegistered : ", "OPENING : "+ url +" \n");

InputStream is = null;
is = connection.getInputStream();

一切正常。但问题是:

  • 如果我输入的手机号码为+919999999999
  • 它以WHITE_SPACE_919999999999的形式存储在MySql中
  • 在MySql中插入或从Android的OpenConnection中删除+符号后,将其替换为空格

在此先感谢您的阅读,帮助和宝贵的时间

  

编辑:2

按照@jeroen给我有关UTF8编码的提示,我对android studio项目中的java代码进行了相应的更改,如下所示:

URL url = new URL("https://www.example.com/getregister.php");
        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();

        connection.setRequestMethod("POST");
        connection.setDoInput(true);
        connection.setDoOutput(true);

        Uri.Builder builder = new Uri.Builder()
                .appendQueryParameter("DEVICEID", deviceid)
                .appendQueryParameter("NAME", name)
                .appendQueryParameter("PHONE", phone)
                .appendQueryParameter("CODE", code);

        String query = builder.build().getEncodedQuery();

        OutputStream os = connection.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
        writer.write(query);
        writer.flush();
        writer.close();
        os.close();

        connection.connect();

现在+字符已存储在MySql中。

1 个答案:

答案 0 :(得分:1)

要在问题下方添加注释:您正在手动构建查询字符串,并且查询字符串中的某些字符具有特殊含义,例如&=以及{{1 }},这是一个已编码的空间。

因此,要在查询字符串中发送实数值,您需要对其进行正确编码。

在这种情况下,例如+应该是deviceid,对于所有其他值,依此类推。