有人可以帮助我如何将这些mysql转换为mysqli吗?
我需要这个,因为mysql-extention导致这个警告:
“不推荐使用mysql扩展,将在...中删除”
我尝试了ConvertingTool,但它会响应警告/错误。 我还尝试在google und w3school的帮助下进行转换。
使用旧的已弃用的mysql版本,它看起来像THAT
但如果我尝试使用mysqli-extention,那么图表就不会出现了。
这是连接器。
<?php
define('DB_SERVER',"localhost");
define('DB_NAME',"Datenbank-Name");
define('DB_USER',"Datenbank-Username");
define('DB_PASSWORD',"Datenbank-Passwort");
$conn = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD);
if(is_resource($conn))
{
mysql_select_db(DB_NAME, $conn);
mysql_query("SET NAMES 'utf8'", $conn);
mysql_query("SET CHARACTER SET 'utf8'", $conn);
}
define("listViewTempPeriod", 24); // Anzeige der Stunden die ausgegeben werden sollen
define("NUMSENSORS", 2); // Anzahl der Sensoren deren Werte in der Datenbank stehen
?>
功能。
<?php
function delLastChar($string="")
{
$t = substr($string, 0, -1);
return($t);
}
function getChartValues($sensorID=0, $timePeriodInHours=24)
{
$q_data = mysql_query("SELECT DATE_FORMAT(datumzeit,'%H') AS STUNDE, sensorwert
FROM arduino_sensorwerte
WHERE sensorid = ".$sensorID." AND datumzeit >= date_sub(now(), interval ".$timePeriodInHours." hour) and datumzeit <= now()
GROUP BY DATE_FORMAT(datumzeit, '%Y-%m-%d %H')
ORDER BY datumzeit DESC") or die(mysql_error());
$n_data = mysql_num_rows($q_data);
if($n_data > 0)
{
$chartValues = '';
$stundenValues = '';
while($r_data = mysql_fetch_array($q_data))
{
$chartValues .= $r_data['sensorwert'].','; // Einzelne Werte durch Komma trennen
$stundenValues .= $r_data['STUNDE'].','; // Einzelne Werte durch Komma trennen
}
$chartValues = delLastChar($chartValues); // Komma hinter dem letzten Temperaturwert entfernen
$stundenValues = delLastChar($stundenValues); // Komma hinter letzter Stunde entfernen
return array($chartValues, $stundenValues);
}
}
function getSensorSettings($sensorID=0)
{
$q_data = mysql_query("SELECT mpcharttype, mplinetype, mpname, mpdescription, mplinecolor
FROM arduino_messpunkte
WHERE messpunktid = ".mysql_real_escape_string($sensorID)) or die(mysql_error());
$n_data = mysql_num_rows($q_data);
if($n_data > 0)
{
$r_data = mysql_fetch_array($q_data);
switch ($r_data['mpcharttype'])
{
case 1:
$mpChartType = 'spline';
break;
case 2:
$mpChartType = 'line';
break;
case 3:
$mpChartType = 'areaspline';
break;
case 4:
$mpChartType = 'area';
break;
case 5:
$mpChartType = 'column';
break;
case 6:
$mpChartType = 'bar';
break;
}
switch ($r_data['mplinetype'])
{
case 1:
$mpLineType = 'solid';
break;
case 2:
$mpLineType = 'ShortDash';
break;
case 3:
$mpLineType = 'ShortDot';
break;
case 4:
$mpLineType = 'ShortDashDot';
break;
case 5:
$mpLineType = 'ShortDashDotDot';
break;
case 6:
$mpLineType = 'Dot';
break;
case 7:
$mpLineType = 'Dash';
break;
case 8:
$mpLineType = 'LongDash';
break;
case 9:
$mpLineType = 'DashDot';
break;
case 10:
$mpLineType = 'LongDashDot';
break;
case 11:
$mpLineType = 'LongDashDotDot';
break;
}
$mpName = $r_data['mpname'];
$mpDescription = $r_data['mpdescription'];
$mpLineColor = $r_data['mplinecolor'];
return array($mpChartType, $mpLineType, $mpName, $mpDescription, $mpLineColor);
}
}
?>
主页上的“示例”调用:
<?php
include_once("inc/db.inc.php");
include_once("inc/functions.inc.php");
if(!isset($_GET['timePeriodInHours'])) $_GET['timePeriodInHours'] = 24; else $_GET['timePeriodInHours'] = $_GET['timePeriodInHours'];
if(!isset($_GET['chartStyle'])) $_GET['chartStyle'] = 1; else $_GET['chartStyle'] = $_GET['chartStyle'];
$colors = array('#89A54E','#80699B','#3D96AE','#DB843D','#92A8CD','#A47D7C','#B5CA92');
for($i=0;$i<NUMSENSORS;$i++)
{
list($chartValues[], $stundenValues[]) = getChartValues($i+1, $_GET['timePeriodInHours'], 1);
}
$stundenValues = $stundenValues[0];
?>
<!DOCTYPE html>
<html>
<head>
<title>Sensoren Übersicht</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="refresh" content="300">
<meta name="Robots" content="index,follow">
<link rel="stylesheet" type="text/css" href="css/highcharts.css">
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
$(function ()
{
var chart;
$(document).ready(function()
{
chart = new Highcharts.Chart(
{
chart:
{
renderTo: 'container'
},
title:
{
text: 'Temperaturwerte der letzten <?php echo $_GET['timePeriodInHours'];?> Stunden'
},
subtitle:
{
text: 'Alle Messstellen'
},
xAxis:
{
title:
{
text: ''
},
categories: [<?php echo $stundenValues;?>]
},
yAxis:
{
title:
{
text: ''
},
labels:
{
formatter: function()
{
return this.value +'°C'
}
}
},
tooltip:
{
crosshairs: true,
shared: true
},
tooltip:
{
formatter: function()
{
return '<b>'+ this.series.name +'</b>'+this.x +' Uhr: '+ this.y +'°C';
}
},
legend:
{
enabled: true
},
credits:
{
enabled: false
},
series:
[
<?php
for($i=0;$i<=NUMSENSORS;$i++)
{
if(!empty($chartValues[$i]))
{
list($mpChartType, $mpLineType, $mpName, $mpDescription, $mpLineColor) = getSensorSettings($i+1);
?> {
type: '<?php echo $mpChartType;?>',
dashStyle: '<?php echo $mpLineType;?>',
name: '<?php echo $mpName;?>',
color: '#<?php echo $mpLineColor;?>',
data: [<?php echo $chartValues[$i];?>],
marker:
{
symbol: 'square',
enabled: false,
states:
{
hover:
{
symbol: 'square',
enabled: true,
radius: 8
}
}
}
},
<?php
}
} //for
?>
] //series
});
});
});
</script>
</head>
<body>
<div id="wrapper">
<script src="es_scripts/highcharts.js"></script>
<div id="container"></div>
</div>
</body>
</html>
答案 0 :(得分:-2)
如果您要将代码转换为mysqli_*
,则应采用prepared statement方式。
让我们在db.inc.php
中重新建立您的MySQL连接:
<?php
$conn = new mysqli("localhost", "Datenbank-Username", "Datenbank-Passwort", "Datenbank-Name");
/* CHECK CONNECTION */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* CHANGE CHARACTER SET TO utf8 */
if (!$conn->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
exit();
} else {
printf("Current character set: %s\n", $mysqli->character_set_name());
}
define("listViewTempPeriod", 24); // Anzeige der Stunden die ausgegeben werden sollen
define("NUMSENSORS", 2); // Anzahl der Sensoren deren Werte in der Datenbank stehen
?>
存储函数的文件(functions.inc.php
):
<?php
function delLastChar($string="")
{
global $conn;
$t = substr($string, 0, -1);
return($t);
}
function getChartValues($sensorID=0, $timePeriodInHours=24)
{
global $conn;
if($stmt = $conn->prepare("SELECT DATE_FORMAT(datumzeit, '%H') AS STUNDE, sensorwert FROM arduino_sensorwerte WHERE sensorid = ? AND datumzeit >= date_sub(NOW(), interval ? hour) AND datumzeit <= NOW() GROUP BY DATE_FORMAT(datumzeit, '%Y-%m-%d %H') ORDER BY datumzeit DESC")){
$stmt->bind_param("ii", $sensorID, $timePeriodInHours);
$stmt->execute();
$stmt->store_result();
$n_data = $stmt->num_rows;
$stmt->bind_result($stunde, $sensorwert);
$chartValues = '';
$stundenValues = '';
while($stmt->fetch()){
$charValues = $sensorwert;
$stundenValues = $stunde;
} /* END OF WHILE LOOP */
$stmt->close();
} /* END OF PREPARED STATEMENT */
$chartValues = delLastChar($chartValues); // Komma hinter dem letzten Temperaturwert entfernen
$stundenValues = delLastChar($stundenValues); // Komma hinter letzter Stunde entfernen
return array($chartValues, $stundenValues);
} /* END OF getChartValues FUNCTION */
function getSensorSettings($sensorID=0)
{
global $conn;
$stmt = $conn->prepare("SELECT mpcharttype, mplinetype, mpname, mpdescription, mplinecolor FROM arduino_messpunkte WHERE messpunktid = ?");
$stmt->bind_param("i", $sensorID);
$stmt->execute();
$stmt->store_result();
$n_data = $stmt->num_rows;
$stmt->bind_result($mpcharttype, $mplinetype, $mpName, $mpDescription, $mpLineColor);
if($n_data > 0)
{
while($stmt->fetch()){
switch ($mpcharttype)
{
case 1:
$mpChartType = 'spline';
break;
case 2:
$mpChartType = 'line';
break;
case 3:
$mpChartType = 'areaspline';
break;
case 4:
$mpChartType = 'area';
break;
case 5:
$mpChartType = 'column';
break;
case 6:
$mpChartType = 'bar';
break;
} /* END OF FIRST SWITCH */
switch ($mplinetype)
{
case 1:
$mpLineType = 'solid';
break;
case 2:
$mpLineType = 'ShortDash';
break;
case 3:
$mpLineType = 'ShortDot';
break;
case 4:
$mpLineType = 'ShortDashDot';
break;
case 5:
$mpLineType = 'ShortDashDotDot';
break;
case 6:
$mpLineType = 'Dot';
break;
case 7:
$mpLineType = 'Dash';
break;
case 8:
$mpLineType = 'LongDash';
break;
case 9:
$mpLineType = 'DashDot';
break;
case 10:
$mpLineType = 'LongDashDot';
break;
case 11:
$mpLineType = 'LongDashDotDot';
break;
} /* END OF SECOND SWITCH */
} /* END OF WHILE LOOP */
return array($mpChartType, $mpLineType, $mpName, $mpDescription, $mpLineColor);
} /* END OF CHECKING NUMBER OF RESULTS */
} /* END OF getSensorSettings FUNCTION */
?>
如果您希望查询只有一行结果,则不需要再循环它。
答案 1 :(得分:-2)
我需要这个,因为mysql-extention导致这个警告:
“不推荐使用mysql扩展,将在...中删除”
只需在config / bootstrap文件中添加/更改此代码
即可error_reporting(E_ALL & ~E_DEPRECATED);
并且此错误将消失。
“它没有解决问题”? - 哦,是的。
但问题不在于你认为的问题。
要解决真正的问题,您必须花费大量时间,因为首先需要花费几年的时间来学习编程,然后花一些时间来完成REWRITE代码。因为这段代码唯一的问题是它过时且不安全的DESIGN。
它的设计是你真正需要改变的,而不是简单的API调用。