为什么一个人不应该使用mysql_*功能的技术原因是什么?(例如mysql_query(),mysql_connect()或mysql_real_escape_string())?
即使他们在我的网站上工作,为什么还要使用其他东西?
如果他们不在我的网站上工作,为什么我会收到错误
警告:mysql_connect():没有这样的文件或目录
我在PHP中编写了一个递归函数来裁剪文本.裁剪后的文本将附加到末尾.非裁剪文本将以其原始状态返回.
如果文本符合最大宽度,它可以工作.但是,如果它不适合给定的宽度,函数将不会返回值,但它应该.似乎忽略了整个return语句.如果我用echo替换返回值,它会显示正确的值.
预期的结果:
-TEST ZIN
-TEST ZI
-TESTž
-TEST
-TES
-TE ......(没有在这里返回所以这将永远不会被显示)
function check_length($str, $max, $size = SIZE, $rec = false) {
echo "FUNCTION $str ";
list($left, , $right) = imageftbbox($size, 0, FONTURL, $str);
if($rec == false) {
if(($right - $left) > $max) {
echo 'if 1<br />';
check_length(substr($str, 0, -1), $max, $size, true);
} else {
echo 'else 1<br />';
return $str;
}
} else {
if(($right - $left) > ($max - 9)) {
echo 'if 2<br />';
check_length(substr($str, …Run Code Online (Sandbox Code Playgroud) 为什么这有时会返回2?
function pickServer(){
$varr = rand(1,4);
if($varr==2){
pickServer();
}
return $varr;
}
Run Code Online (Sandbox Code Playgroud) 我有一个函数,给定一个文件名和目录路径,检查目录是否已经包含一个具有相同名称的文件,如果是这样,则返回一个修改过的文件名(通过在文件名的第一部分后附加一个数字).(get_filenames()函数是一个CodeIgniter帮助函数,它创建一个包含指定目录中所有文件名的数组.)
当我尝试打印出函数调用的返回结果时,我什么都没得到; 但是如果我在函数本身的else {}语句中打印$ new_filename,那么只需调用该函数(而不是打印它的值),它就可以了!
我需要返回函数中的值,而不是打印它,因为我实际上需要将结果分配给变量以进行进一步处理.(在下面的例子中,我刚刚打印了函数调用的结果来演示这一点.)
功能:
function avoid_conflicting_filenames($old_filename, $new_filename, $dir, $count)
{
$num = '';
if ($count > 0):
$num = $count;
endif;
$filename_arr = explode('.', $old_filename, -1);
$new_filename = $filename_arr[0] . $num . '.' . $filename_arr[1];
if (in_array($new_filename, get_filenames($dir))):
$count++;
avoid_conflicting_filenames($old_filename, $new_filename, $dir, $count);
else:
return $new_filename;
endif;
}
Run Code Online (Sandbox Code Playgroud)
我在哪里调用函数:
print avoid_conflicting_filenames('file.jpg', '', 'path/to/file', 0);
Run Code Online (Sandbox Code Playgroud)
这让我在过去的一天疯狂,所以任何帮助都将不胜感激!谢谢.
$startDate = 20130201;
$date = 20130505;
$aDates = $this->getDates($startDate, $date);
public function getDates($startDate, $date) {
$tmpStartDate = date("Ymd", strtotime($startDate.'+1 Day'));
$tmpEndDate = date("Ymd", strtotime($tmpStartDate.'+1 Month'));
if($date >= $tmpStartDate && $date <= $tmpEndDate) {
//return array('startDate' => $tmpStartDate, 'endDate' => $tmpEndDate);
} else {
$this->getDates($tmpEndDate, $date);
}
}
Run Code Online (Sandbox Code Playgroud)
I was working on an API for ustream which returns the following array
Array
(
[results] => Array
(
[0] => Array
(
[id] => 33756327
[userName] => sachintaware
[title] => Mobile record
[protected] =>
[description] => Recorded on my Android phone.
[createdAt] => 2013-06-03 03:29:38
[rating] => 0.000
[lengthInSecond] => 371.544
[totalViews] => 5
[codecIsForLiveHttp] =>
[url] => http://www.ustream.tv/recorded/33756327
[embedTag] =>
[liveHttpUrl] =>
[imageUrl] => Array
(
[small] => http://static-cdn2.ustream.tv/videopic/0/1/33/33756/33756327/1_14659377_33756327_120x90_b_1:2.jpg
[medium] => http://static-cdn2.ustream.tv/videopic/0/1/33/33756/33756327/1_14659377_33756327_320x240_b_1:2.jpg
)
[sourceChannel] => Array
(
[id] …Run Code Online (Sandbox Code Playgroud) 此函数返回NULL,而$ alias在第二次递归中具有值.在第一次调用时,它返回所需的值,但是如果第一次调用不匹配,则首先在$ alias变量中以可用的值递归所需的值,但它不返回任何内容.
public function checkAlias($fname='',$lname=''){
if(!empty($fname)){
$fname = mysql_real_escape_string($fname);
}
if(!empty($lname)){
$lname = mysql_real_escape_string($lname);
}
$alias = strtolower($fname).strtolower($lname);
$sql = "Select ALIAS from table where ALIAS = '$alias'";
$query = mysql_query($sql);
$row = mysql_fetch_row($query);
$string_length = strlen($alias) - 1;
$result_string = substr($alias,0,$string_length);
if(!$row){
print $alias; // is printing value
return $alias; // but here it returns null
}else{
$this->checkAlias($result_string);
}
}
Run Code Online (Sandbox Code Playgroud) 我有这个递归函数调用自己直到数字达到总数.我做了这个演示来显示工作,实际上是secondFunc()conatins数据库查询.我正在从firstFunc()传递给secondFunc()的数组中保存值.问题是,当我调用第一个函数时,它只显示1个值,即1.当我在第二个函数中取消注释var_dump时,它显示所有值.我知道我做错了什么.请指出我的错误.这里的问题是什么?
function firstFunc($total){
$array=array();
$num=0;
return secondFunc($total,$num,$array);
}
function secondFunc($total,$num,$array){
$num++;
$array[$num]=$num;
if($num<$total){
secondFunc($total,$num,$array);
}
//var_dump($array);
//exit();
return $array;
}
var_dump(firstFunc(5));
Run Code Online (Sandbox Code Playgroud)
我构建了一个带文件名的函数,并在文件名中递增一个计数器并返回它,但是,一切都是正确的,除了返回不返回文件名.
有什么帮助吗?
我的代码:
$filename = join("", array_reverse($date));
$filename .= ".xml";
$dir = "../gigs";
$file = $dir."/".$filename;
function getNewFileName($filename, $dir) {
if (is_file("$dir/$filename")) {
if (strpos($filename, "_") === false) {
$filename = str_replace(".xml","_1.xml",$filename);
getNewFileName($filename, $dir);
}
else {
$pos = strpos($filename, "_");
$counter = (int)substr($filename, $pos+1,1);
$counter++;
$filename = substr($filename,0, $pos)."_".$counter.".xml";
getNewFileName($filename, $dir);
}
} else {
// echoing HERE shows that the string is manipulated correctly
return (string)$filename; // but returning here is not working
}
}
echo getNewFileName($filename, $dir); …Run Code Online (Sandbox Code Playgroud) 这是我的功能:
function loop($id){
unset($result, $sql, $query);
$sql = " SELECT parent_id FROM page_entries WHERE id = '$id' ";
$query = mysql_query ( $sql )or die(mysql_error());
$result = mysql_fetch_assoc ( $query )or die(mysql_error());
if ( $result['parent_id'] != 0 ) {
echo $result['parent_id']."... looping<br>";
loop($result['parent_id']);
} else {
echo $result['parent_id']."... done loop";
return $result['parent_id'];
}
}
echo loop('2');
Run Code Online (Sandbox Code Playgroud)
我正在回应parent_id进行测试.这是输出到浏览器的内容:
1 ...循环
0 ...完成循环
在我不确定发生了什么的情况下echo loop('2'),return $result['id']如果我注释掉echo函数中的行,则不会回应任何内容.我已经尝试通过改变返回来测试,但return 'foo';仍然没有.
有任何想法吗?
我之前从未在PHP中使用过递归,所以我对此非常新手 - 我有以下问题.WordPress函数应该返回给定子术语id的顶级术语id - 术语可以有1..n父项,因此递归函数似乎在这里很有用.
// recursive function
function return_top_level_term($term_id,$taxonomy_name) {
$term = get_term_by('id',$term_id,$taxonomy_name);
if($term->parent>0) {
return_top_level_term($term->parent,$taxonomy_name);
} else {
// here we get the correct value
return $term->term_id;
}
}
Run Code Online (Sandbox Code Playgroud)
PHP确实找到了正确的term_id,但该函数总是返回false.
$my_top_level_term = return_top_level_function(423,$tax);
Run Code Online (Sandbox Code Playgroud)
三层示例,非正式表示法:
return_top_level_term(return_top_level_term(return_top_level_term(return 1;)return false;) return false;)
Run Code Online (Sandbox Code Playgroud)
我正在搜索1,但返回总是false,尽管该函数没有返回值.
当然我可以在函数上面写一个局部变量,由于范围规则可以保存值,但是我想把它写入一个库 - 有没有办法通过调用递归函数来返回这个值?
我现在已经在一个功能上摸不着头脑,想知道是否有人能看到我做错了什么?我试图从函数返回一个值,但它是null,即使我知道我返回的值不是.这是我的功能:
if (!function_exists('findTopLevel')){
function findTopLevel($id){
$DatabaseID = $id;
echo json_encode($DatabaseID); //correct
$parentID = $_SESSION['items'][$DatabaseID]['ParentID'];
echo json_encode($parentID); //correct
if($parentID == "top"){
echo json_encode($DatabaseID); //correct
return $DatabaseID; //returns null
}
else if($parentID !== "top"){
ini_set('memory_limit', '-1');
findTopLevel($parentID);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里称呼它:
if(!strpos($HiddenPositionArray, $DatabaseID)){
$topLevel = findTopLevel($DatabaseID);
echo json_encode($topLevel); //says: null
}
Run Code Online (Sandbox Code Playgroud)
(当我知道它有效时,我不会回应所有这些东西.)
怎么了?
我希望我的函数返回整个url,从具有给定id的节点开始,并为父项进行serching,最后一个具有parent_id = 1.我的功能几乎可以工作,回显"$ wholeUrl"; 我有我的网址,但功能不会重新调整它,我不知道wtf,请帮忙.
这是我的代码:
function getUrl($ xml,$ id){
$wholeUrl="";
$wholeUrl= getMyUrl($xml,$id,$wholeUrl);
return $wholeUrl;
Run Code Online (Sandbox Code Playgroud)
}
function getMyUrl($ xml,$ idWew,$ wholeUrl){
foreach($xml as $node) {
$par = $node->parent_id;
$ide = $node->id;
$url = $node->url;
$name = $node->name;
settype($par,'integer');
settype($ide,'integer');
if($ide==$idWew){
$wholeUrl=$url."/".$wholeUrl;
if($par==1){
echo"$wholeUrl ";
return $wholeUrl;
break;
}else{
getMyUrl($xml,$par,$wholeUrl);
}
}
}
}
print_r(getUrl($xmlcat,1877));
Run Code Online (Sandbox Code Playgroud)
$ xmlcat是具有以下结构的平面数组:
SimpleXMLElement Object ( [id] => 1876 [parent_id] => 1 [name] => blablabla, bla, bla [url] => bla-bla-bla-bla )
Run Code Online (Sandbox Code Playgroud)