在将文本插入MySql表时自动删除给定的单词(或值)

时间:2017-07-10 14:38:06

标签: php mysql string-interpolation

我之前曾经问过类似的问题,但这有点不同。

我刚刚启动了在线短信网关服务,可让您在线接收消息

一个常见的数字,为任何传入的消息分配一个共享的公共号码,然后通过 开头显示的选择的标识关键字对其进行排序并分配给特定客户文本

identifier关键字是一个aplhanumeric值。

see an example here

通过 php [POST]页面将传入的文本转发到数据库表是我正在做的事情;并且,正如您可能想象的那样,在输入插入时删除初始关键字是我的愿望(默认情况下没有完成)。

表中存储的所有传入的mesagges都以相同的单词开头,这在数据保护方面当然是不必要的和还原的

我该怎么做?这里的一个明显优势是密钥是唯一且不变的。

这是我目前在我的php页面中使用的脚本,其中文本被转发。 (那些POST参数是服务管理员提供的参数)

<?php
if ($_SERVER['REQUEST_METHOD']!='POST') 
{
echo 'No Script Here!';
exit;
}

$con = new mysqli('localhost','','','');


$insert_sms_success = FALSE;

if (mysqli_connect_errno()==0)
{ 
$sent_dt = $_POST['Timestamp'];
$txt = $_POST['Body']; 
$sender_number = $_POST['Sender'];   
$shared_number = $_POST['Destination'];

$txt = mysqli_real_escape_string($con, $txt);
$sender_number = mysqli_real_escape_string($con, $sender_number);

$sql="INSERT INTO SMS_IN_A(sms_text,sender_number,sent_dt) VALUES ('$txt','$sender_number','$sent_dt')";

$insert_sms_success = mysqli_query($con,$sql);

mysqli_close($con);
}

if ($insert_sms_success)
{
}
else 
{  
http_response_code(500);
}                                          
?>

ps:你可以看到所有传入的文本都以相同的单词开头,在我选择的情况下是#34; posto&#34; enter image description here

1 个答案:

答案 0 :(得分:0)

首先,我强烈建议切换到PDO并使用prepare清理数据,然后再将其插入数据库。现在,由于您正在从文本消息中插入正文文本,因此您很容易受到SQL注入攻击。

话虽如此,你只想使用PHPs字符串操作方法来删除第一个单词。

$s = 'posto my text message';
$s = substr($s, strpos($s, ' ')); // $s = 'my text message'

现在,如果您绝对必须使用SQL执行此操作,您可以这样做:

$sql = "INSERT INTO SMS_IN_A(sms_text,sender_number,sent_dt) VALUES (
            SUBSTRING('$txt', LOCATE(' ', '$txt')),
            '$sender_number',
            '$sent_dt')"

同样,真的真的不建议这样做,因为很容易让某人在文本正文中发送恶意SQL,这可能会毁了你的一天(以及你的数据库)