我使用以下脚本将记录插入我的数据库:
$sql = "INSERT INTO fotetweets VALUES('$tweetid','$dp', '', '$username','$tag', '$twittercontent', '$twittertimestamp', '')";
mysql_query($sql);
但是,如果
$twittercontent
包含'
字符,我认为它将失败。对的?如果是这样,我该如何正确处理呢?
最佳答案
您将需要查看mysql_real_escape_string。但是,我将研究如何使用mysqli
或PDO
类,并使用准备好的语句。
编辑
注意,这些都可以在PHP手册的prepared语句示例下找到/获得。
MySQLi的示例用法:
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "my_database");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* create a prepared statement */
$stmt = $mysqli->stmt_init();
if ($stmt->prepare("INSERT INTO fotetweets VALUES(?, ?, '', ?, ?, ?, ?, '')")) {
/* bind parameters for markers */
$stmt->bind_param("issssi", $tweetid, $dp, $username, $tag, $twittercontent, $twittertimestamp);
/* execute query */
$stmt->execute();
/* close statement */
$stmt->close();
}
?>
示例用法PDO:
<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$sth = $dbh->prepare('INSERT INTO fotetweets VALUES(?, ?, '', ?, ?, ?, ?, '')');
$sth->execute(array($tweetid, $dp, $username, $tag, $twittercontent, $twittertimestamp));
?>
mysql_real_escape_string用法示例:
$tweetid = (int) $tweetid; // static cast to integer, if that is what it should be.
$sql = "INSERT INTO fotetweets VALUES(
$tweetid,'" . mysql_real_escape_string($dp) . "',
'', '" . mysql_real_escape_string($username) . "',
'" . mysql_real_escape_string($tag) . "',
'" . mysql_real_escape_string($twittercontent) . "',
'" . mysql_real_escape_string($twittertimestamp) . "', '')";
您可以在上面列出的手册页中找到更多信息和额外的使用示例。如果我知道什么是
$dp
的话,我就不能精确地裁剪它。旁注
这是我愿意做的所有假设。操作人员可以从POST和/或数组形式获取数据,也可以从不同的方法获取数据。或者,以OP发布的示例为例,这是我为OP量身定做的最准确的方法。如果您有问题或者认为可以更好地解释/展示,好吧,继续写下另一个答案,而不仅仅是另一个抱怨性的评论:当你不愿意自己写下“正确”的答案时,没有人会做任何正确的事情。
当然,如果它是一个数组,这会改变很多项,操作程序应该清除这些项,而不仅仅是随机的人在哪里和如何检索数据进行“猜测”。
关于php - 将记录插入MySQL DB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3763042/